7강 질문드립니다
110
投稿した質問数 1
BEGIN
UPDATE tbl_user
SET userpw = in_userpw
WHERE userid = in_userid;
SET out_state = 0;
SELECT userid, userpw, out_state FROM tbl_user WHERE userid = in_userid;
END
이렇게 작성했을 때는 out_state가 잘 반환이 되는데
UPDATE tbl_user
SET userpw = in_userpw
WHERE userid = in_userid;
SELECT userid, userpw
FROM tbl_user
WHERE userid = in_userid;
SET out_state = 0;
이렇게 작성했을 땐 mapper에서 설정도 out으로 해놨는데도 반환이 안되고 자꾸 null값이 나오는 걸까요??
回答 2
0
안녕하세요.개발자park입니다.
7강 13:16초에 40번째 Line을 보시면요.
paramMap변수에 out_state를 Key로 사용해서
값을 저장합니다.
그렇기에 저장 프로시저가 실행된 후의 out_state키의 값을 얻고자하시면
paramMap변수로부터 얻을 수가 있겠습니다.
질문주신 1번째 쿼리는 select문에 포함되기에
강의 41번째 Line의 resultMap변수에서도
out_state키로 값을 얻으실 수 있습니다.
감사합니다.
0
네 저도 이렇게 생각해서 진행하고
@Override
public HashMap<String, Object> selectLogin(HttpServletRequest request) throws Exception {
String userid = request.getParameter("id");
if(userid.length()>10) {
throw new Exception("validError_userid");
}
HashMap<String,Object> paramMap = new HashMap<>();
// request 된것을 paramMap에 담아주기
paramMap.put("myid", userid);
paramMap.put("out_state", -1);
HashMap<String,Object> resultMap = mainMapper.selectLogin(paramMap);
System.out.println("Result Map2: " + resultMap);
if(resultMap == null) {
throw new Exception("resultError_idNotFound");
}
return resultMap;
}
여기서 담기는 값이 debug로도 확인이 안되서 이렇게 print를 해보았는데도 해당 방식으로는 out_state에 내용이 담기지 않아서 그 점이 의문이었습니다.
0
안녕하세요.개발자park입니다.
질문주신 2번째 쿼리로는 out_state가
System.out.println("Result Map2: " + resultMap);해당 결과에 출력이 안될 것 입니다.(이유:Select문에 포함이 안됨)
java코드의 resultMap변수에서 얻고자하시면 1번째 쿼리를 사용하셔야되고요.
질문주신 2번째 쿼리로는
1.HashMap<String,Object> resultMap = mainMapper.selectLogin(paramMap);
코드가 실행된 후에
2.paramMap변수로부터 out_state키의 값을 얻은 후
3.resultMap에 수동으로 키와 값을 넣어줄 수도 있겠습니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. blueocean1855님.
Oracle과 MyBatis를 사용할 때, 프로시저 안에서 SELECT문의 결과를 올바르게 반환받기 위해서는 프로시저의 모든 OUT 파라미터가 제대로 설정되고 순서가 정확하게 지켜져야 합니다.
문제의 원인
- PL/SQL의 흐름 제어 문제:
SELECT문보다SET out_state = 0;문이 먼저 수행되지 않는 경우 값이 설정되지 않기 때문입니다. 프로시저 종료 전에out_state가 정확하게 설정되지 않아 null이 반환될 수 있습니다.
- 출력 순서 문제:
out변수는 일반적으로 마지막에 결과를 설정하도록 권장됩니다.
해결 방법
- 변수 설정 순서 확인:
- 프로시저 로직 상
out_state를 설정하는 부분(SET out_state = 0;)이 SELECT문 이후에 위치하여서 결과가 Null이 반환될 수 있습니다.out_state를 사용하는 다른 로직보다 앞서서 설정하는 것이 안전합니다.
- 프로시저 로직 상
BEGIN
UPDATE tbl_user
SET userpw = in_userpw
WHERE userid = in_userid;
-- Set out_state first
SET out_state = 0;
SELECT userid, userpw
INTO out_userid, out_userpw -- Assuming these are OUTPUT parameters
FROM tbl_user
WHERE userid = in_userid;
END;
INTO 절 사용:
- Oracle PL/SQL에서
SELECT ... INTO절을 사용하여 조회된 값을 변수에 할당할 수 있습니다. SELECT문에서INTO절을 꼭 사용하여야 합니다.
- Oracle PL/SQL에서
Mapper XML 설정 검토:
- MyBatis Mapper XML에서 결과 맵핑과 프로시저 파라미터 설정을 다시 한번 확인해주세요. OUT 파라미터가 제대로 설정됐는지도 확인이 필요합니다.
- MyBatis Mapper XML에서 결과 맵핑과 프로시저 파라미터 설정을 다시 한번 확인해주세요. OUT 파라미터가 제대로 설정됐는지도 확인이 필요합니다.
관련된 예시와 설정 방법은 다음의 URL에서 확인하실 수 있습니다:
- 프로시저에서 SELECT문 결과를 반환하여 MyBatis와 연동하는 방법
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
6강 실컷 진행하다가 마지막 실행부분에서 안되요...
0
84
2
이전버전 강의 쿠폰 받을 수 있나요?
0
100
2
jdk-17로 해도 상관없나요?
0
143
2
제6강. No bean named 'MainService' available 에러 발생
0
278
2
인텔리제이 세팅
0
161
2
http://localhost:8080/Egov_WEB/main2.do 요청 관련
0
172
4
1,2강 환경 구축시 메이븐 에러
0
588
2
Egov_WEB3 로그인을 하면 에러가 납니다.
0
278
3
db로 mariaDB가아니라 MySQL을 사용해도 괜찮을까요?
0
125
1
안녕하세요~ 쿠폰 관련해서 질문드립니다
0
104
1
혹시 이 강의부터 결제하면 "스프링 프레임워크+전자정부 표준프레임워크"의 강의를 들을수 없나요?
0
149
2
Egov_WEB3 실행시 에러질문드립니다.
0
165
2
7강 프로시저 호출하기 부분에서 Oracle의 경우 resultMap을 어떻게 받을 수 있을까요?
0
266
2
스프링 프레임워크+전자정부 표준프레임워크 강의 쿠폰요청 메일
0
168
1
질문있습니다
0
140
1
현강의 및 국비지원 수강생입니다.
0
171
1
수정, 삭제 기능 관련 질문있습니다
0
236
2
13강 제공해주신 소스코드 중 boardList.do 에러
0
181
1
MainMapper.xml 파일에 프로시저 관련하여
0
316
3
강의자료 중 프로젝트 파일 여는 방법
0
309
2
전자정부표준프레임워크에서 마리아 디비 말고 다른 디비를 써도 되나요?
0
198
1
15강#1 질문드립니다.
0
207
2
파일을 다운로드 로드중 문제가 생겼습니다
0
180
1
제6강#0 질문입니다.
0
301
3

