inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

3. 웹개발 코스 [Enterprise Architecture(EA) X 전자정부프레임워크]

7강 질문드립니다

111

blueocean1855

작성한 질문수 1

0

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값이 나오는 걸까요??

spring 전자정부프레임워크

답변 2

0

개발자Park

안녕하세요.개발자park입니다.

7강 13:16초에 40번째 Line을 보시면요.

https://www.inflearn.com/course/lecture?courseSlug=%EC%9B%B9%EA%B0%9C%EB%B0%9C-%EC%BD%94%EC%8A%A4-ea-%EC%A0%84%EC%9E%90%EC%A0%95%EB%B6%80-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC&unitId=155007&tab=curriculum&subtitleLanguage=ko

paramMap변수에 out_state를 Key로 사용해서

값을 저장합니다.

그렇기에 저장 프로시저가 실행된 후의 out_state키의 값을 얻고자하시면

paramMap변수로부터 얻을 수가 있겠습니다.

질문주신 1번째 쿼리는 select문에 포함되기에

강의 41번째 Line의 resultMap변수에서도

out_state키로 값을 얻으실 수 있습니다.

감사합니다.

0

blueocean1855

네 저도 이렇게 생각해서 진행하고

@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

안녕하세요.개발자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에 수동으로 키와 값을 넣어줄 수도 있겠습니다.

감사합니다.

 

1

blueocean1855

아하 set은 되어있는데 그 값을 가져오는 쿼리가 없어서 내용이 안나온거였군요 감사합니다!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. blueocean1855님.

Oracle과 MyBatis를 사용할 때, 프로시저 안에서 SELECT문의 결과를 올바르게 반환받기 위해서는 프로시저의 모든 OUT 파라미터가 제대로 설정되고 순서가 정확하게 지켜져야 합니다.

문제의 원인

  • PL/SQL의 흐름 제어 문제: SELECT 문보다 SET out_state = 0; 문이 먼저 수행되지 않는 경우 값이 설정되지 않기 때문입니다. 프로시저 종료 전에 out_state가 정확하게 설정되지 않아 null이 반환될 수 있습니다.
  • 출력 순서 문제: out 변수는 일반적으로 마지막에 결과를 설정하도록 권장됩니다.

해결 방법

  1. 변수 설정 순서 확인:
    • 프로시저 로직 상 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;
  1. INTO 절 사용:

    • Oracle PL/SQL에서 SELECT ... INTO절을 사용하여 조회된 값을 변수에 할당할 수 있습니다. SELECT문에서 INTO절을 꼭 사용하여야 합니다.
  2. Mapper XML 설정 검토:

    • MyBatis Mapper XML에서 결과 맵핑과 프로시저 파라미터 설정을 다시 한번 확인해주세요. OUT 파라미터가 제대로 설정됐는지도 확인이 필요합니다.

관련된 예시와 설정 방법은 다음의 URL에서 확인하실 수 있습니다:
- 프로시저에서 SELECT문 결과를 반환하여 MyBatis와 연동하는 방법

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

6강 실컷 진행하다가 마지막 실행부분에서 안되요...

0

87

2

이전버전 강의 쿠폰 받을 수 있나요?

0

104

2

jdk-17로 해도 상관없나요?

0

145

2

제6강. No bean named 'MainService' available 에러 발생

0

285

2

인텔리제이 세팅

0

163

2

http://localhost:8080/Egov_WEB/main2.do 요청 관련

0

178

4

1,2강 환경 구축시 메이븐 에러

0

594

2

Egov_WEB3 로그인을 하면 에러가 납니다.

0

282

3

db로 mariaDB가아니라 MySQL을 사용해도 괜찮을까요?

0

127

1

안녕하세요~ 쿠폰 관련해서 질문드립니다

0

105

1

혹시 이 강의부터 결제하면 "스프링 프레임워크+전자정부 표준프레임워크"의 강의를 들을수 없나요?

0

152

2

Egov_WEB3 실행시 에러질문드립니다.

0

166

2

7강 프로시저 호출하기 부분에서 Oracle의 경우 resultMap을 어떻게 받을 수 있을까요?

0

268

2

스프링 프레임워크+전자정부 표준프레임워크 강의 쿠폰요청 메일

0

170

1

질문있습니다

0

142

1

현강의 및 국비지원 수강생입니다.

0

172

1

수정, 삭제 기능 관련 질문있습니다

0

241

2

13강 제공해주신 소스코드 중 boardList.do 에러

0

182

1

MainMapper.xml 파일에 프로시저 관련하여

0

328

3

강의자료 중 프로젝트 파일 여는 방법

0

314

2

전자정부표준프레임워크에서 마리아 디비 말고 다른 디비를 써도 되나요?

0

199

1

15강#1 질문드립니다.

0

209

2

파일을 다운로드 로드중 문제가 생겼습니다

0

182

1

제6강#0 질문입니다.

0

304

3