標籤:
開啟plsql,在packages檔案夾裡建立預存程序
在sql視窗中運行如下語句
create or replace package SY_USER_PKG1 is
TYPE MYCURSOR IS REF CURSOR;
--自己寫的測試預存程序
PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
);
end SY_USER_PKG1;
則會在packages檔案夾下出現這個預存程序標記,就相當於java中的一個介面吧!
然後:再寫具體的預存程序,就相當於java中的介面實作類別吧
create or replace package body SY_USER_PKG1 is
PROCEDURE T_CHCODE1
(
v_phone IN VARCHAR2,
v_userType IN NUMBER,
v_type IN NUMBER,
v_err_code OUT NUMBER
)
IS
v_userCount NUMBER;
BEGIN
IF v_type=1 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=1 THEN
v_err_code:=1;
else
v_err_code:=0;
END IF;
end if;
IF v_type=2 THEN
SELECT COUNT(1) INTO v_userCount FROM t_user_register_info A WHERE A.ACCOUNT=v_phone and a.user_type_id=v_userType;
IF v_userCount=0 THEN
v_err_code:=2;
else
v_err_code:=0;
END IF;
END IF;
end T_CHCODE1;
end SY_USER_PKG1;
這段代碼按F8運行後,在packages bodyies檔案夾下會出現這個
這就是一個完整的預存程序了,有介面,有實現
下面讓我們來測試一下
點擊右鍵,會有測試選項
填入參數,如,F8運行,結果如
可以看到拿到了返回的結果值 0
然後就可以在java代碼中調用了,在mapper設定檔中是這樣的:
<insert id="chcode" parameterType="java.util.Map" statementType="CALLABLE">
<![CDATA[
{call SY_USER_PKG1.T_CHCODE1(
#{v_phone,mode=IN,jdbcType=NVARCHAR},
#{v_userType,mode=IN,jdbcType=NUMERIC},
#{v_type,mode=IN,jdbcType=NUMERIC},
#{v_err_code,mode=OUT,jdbcType=NUMERIC}
)
}
]]>
</insert>
在service實作類別中直接調用
oCode就是拿到的傳回值了。
至此,一個調用預存程序的流程結束了!
一個oracle預存程序