ibatis 호출 oracle 저장 프로 세 스, 매개 변수 형식 INOUT

2413 단어 Oaclesqlibatis
오늘 ibatis 로 Oacle 저장 과정 을 호출 할 때 이상 한 문제 가 발생 했 습 니 다. 먼저 코드 를 붙 여 주세요.
저장 프로시저
CREATE OR REPLACE PROCEDURE test(
       p_userName in varchar2,
       p_age in number,
       p_res in out varchar2
)
as
       i_count number;
       --i_age number;
begin
       --           ,           
       --   :      count  ,                
       --     select count(username),age into i_count,i_age from ....
       --   ,                (               )
       --     oracle     
       select count(username) into i_count from userinfo where username=p_username;
       --if SQL%NOTFOUND then
         -- p_res := '-2';
          --return;
       --end if;
       if(0 <> i_count)then
            insert into userinfo(username,age) values(p_username,p_age);
            commit;
            p_res := '0';
       else
            p_res := '-2';--      
       end if;
       exception
           when others then 
                p_res := '-1';  --     
            rollback;
end test;

sqlMap 설정 파일
<sqlMap>
	<parameterMap id="test" class="java.util.HashMap">
		<parameter property="userName" jdbcType="varchar2" javaType="java.lang.String" />
                <parameter property="age" jdbcType="int" javaType="java.lang.Integer" />
		<parameter property="res" jdbcType="varchar2" javaType="java.lang.Integer"
			mode="INOUT" />
	</parameterMap>
	<procedure id="testPro" parameterMap="test">
		{call puc_test(?,?)}
	</procedure>
</sqlMap>

저장 프로 세 스 타 임 스 가 잘못 되 었 습 니 다. regist output parameter is failed 는 반나절 동안 원인 을 찾 았 지만 찾 지 못 했 습 니 다. 발견 하 였 습 니 다.
<parameter property="res" jdbcType="varchar2" javaType="java.lang.Integer"
			mode="INOUT" />
여기 mode = "INOUT" 를 mode = "IN" 으로 바 꾸 면 문제 가 없고 아무리 생각해 도 이해 가 되 지 않 습 니 다. 마지막 으로 우연 한 기회 에 만약 mode = "INOUT" 이 jdbdType 이 varchar 2 를 사용 할 때 대문자 로 써 야 한 다 는 것 을 알 게 되 었 습 니 다.

좋은 웹페이지 즐겨찾기