打开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就是拿到的返回值了。
至此,一个调用存储过程的流程结束了!