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;
如果觉得《java调用存储过程 oracle_java调用oracle存储过程》对你有帮助,请点赞、收藏,并留下你的观点哦!