oracle创建自定义函数/存储过程的创建和调用(sqlplus调用&Mybatis调用)

一 oracle创建有返回值的函数并调用函数

1 创建调用只有输入参数的函数

create or replace function fun_test_1(param1 in number,param2 in number)
return number as
    begin
        if param1>param2 then
            return param1;
        else
            return  param2;
        end if;
    end fun_test_1;
-- 调用函数
select fun_test_1(66,33) from dual;

2 Mybatis中调用

创建有输入输出参数的函数

-- 创建带有输入输出参数的函数
create or replace function fun_test_2(param1 in number,param2 out number)
return number as
    begin
        if param1>param2 then
            return param1;
        else
            return  param2;
        end if;
    end fun_test_2;

这种函数我们一般不会在sqlplus中进行调用,个人认为调用的时候使用mybatis或者使用PLSQL等工具进行测试比较方便

<select id="funTest" statementType="CALLABLE" parameterType="java.util.Map">
   {#{param2,mode=OUT,jdbcType=NUMBER} = call F_GET_ROLEIDS(#{param1,mode=IN,jdbcType=NUMBER})}
</select>

需要注意的是我们不需要创建返回值进行参数的接收,当我们传递的参数为map时,mybati会自动将我们的out类型参数封装到我们的parameterType的map集合中;

二 oracle存储过程的创建和调用

1 创建调用存储过程

-- 创建存储过程
create or replace procedure pro1(uname in varchar2,pwd in varchar2,num in number,mes out varchar2,code out varchar2) is
begin
    insert into TEST_MR values (uname,pwd,num);
end;
-- 调用
declare
    code varchar2(4);
    mes varchar2(10);
    uname varchar2(10);
    pwd varchar2(10);
begin
    pro1(uname => 'lk',pwd => '123',num => 2,mes => mes,code => code);
    DBMS_OUTPUT.PUT_LINE(mes);
end;

-- 删除存储过程
drop procedure PRO1;-- 创建存储过程

2 Mybatis调用参数过程

和调用自定义函数一样,不需要创建结果集Map来接收返回来的output参数,只要执行结束,output参数会自动封装到里面;

只不过,存储过程我们习惯将输出参数定义在()里面进行传参

<select id="proTest" statementType="CALLABLE" parameterType="java.util.Map">
        {call pro1
            (
                #{uname,mode=IN,jdbcType=VARCHAR},
                #{password,mode=IN,jdbcType=VARCHAR},
                #{num,mode=IN,jdbcType=NUMBER},
                #{mes,mode=OUT,jdbcType=VARCHAR},
                #{code,mode=OUT,jdbcType=VARCHAR}
            )}
</select>

总结

本次主要记录在工作中遇到的问题和解决之后的总结

本次测试使用工具:

ORACLE数据库连接工具: DataGrip2020.1

笔记工具:Typora

时间"2020-11-08

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liu.kai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值