java调用存储过程 oracle_java调用oracle存储过程

java调用oracle存储过程

java代码

Map param = new HashMap();

param.put("in_str", "1,2,3,4");//入参

wxMapper.execProcedure(param);//调用存储过程,参数以map的形式传递

String lsn = param.get("out_str");//出参

mybatis的接口定义

String execProcedure(Map param);

mybatis的xml文件

{call lsq_pkg_test(

#{in_str,mode=IN,jdbcType=VARCHAR},#{out_str,mode=OUT,jdbcType=VARCHAR})}

存储过程

create or replace procedure lsq_pkg_test (in_str in out varchar2,out_str out varchar2) is

--如果入参不需要修改则为(in_str in varchar2),否则为(in_str in out varchar2).相当于多加了一个out

v_res_str varchar2(20);

v_current varchar2(20);

tmp_str number;

tmp_s varchar2(100);

begin

v_res_str:='';

v_current:='';

loop

EXIT WHEN in_str IS NULL;

lsq_pkg_grant_test(in_str, v_res_str, v_current, ',');--字符串的截取

select count(*) into tmp_str from 表名 where 字段名= v_current;--根据截取的字符,进行数据库的查询

if tmp_str =0 then--查询不到数据

out_str:=CONCAT(tmp_s,v_current) ;--把截取的字符赋值给返回值

tmp_s:=concat(out_str,',');

--tmp_s :=out_str;

in_str:=v_res_str;--把截取后剩下的字符,再一次赋值给原始字符,进行字符串截取

else

in_str:=v_res_str;--把截取后剩下的字符,再一次赋值给原始字符,进行字符串截取

end if;

end loop;

end;

字符串截取的存储过程

create or replace procedure lsq_pkg_grant_test(P_INSTR IN VARCHAR2,--传入字符串,逗号分隔,输入参数

P_STRS OUT VARCHAR2,--截取第1个值之后剩下的字符串,输出参数

P_CURR OUT VARCHAR2, --截取到的第1个值,输出参数

P_CHAR IN VARCHAR2--以什么字符为分隔字符

) is

CURR_LOCA NUMBER;

begin

CURR_LOCA := INSTR(P_INSTR, P_CHAR, 1, 1);

P_CURR := SUBSTR(P_INSTR, 0, CURR_LOCA - 1);

IF P_CURR IS NULL THEN

P_CURR := P_INSTR;

P_STRS := NULL;

ELSE

P_STRS := SUBSTR(P_INSTR, CURR_LOCA + 1);

END IF;

end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值