java ibatis调动oracle传入clob参数的存储过程

我试了几个,得出结论:

java程序,无法直接用ibatis调动oracle传入clob参数的存储过程,而只能将clob参数插入数据库表的字段,插入时直接传入String参数就可以,所以,标题应该这么解决:

1.将clob字段先插入数据库中建有clob字段的临时表

2.存储过程中从表中将clob字段取出使用。

我的代码如下:

oracle数据库建表:

create table t_temp_sendbatchfj(
rightcodes clob,
errorcodes clob,
clientid varchar2(20),
mainid varchar2(20));

java代码(其中erroecodes和rightcodes都是要使用的clob字段,从ibatis传入时直接传String类型即可传入oracle的clob字段):

Map p_pro = new HashMap();
			//由于java无法调用in_clob的存储过程,所以先将clob插入表,然后再从表中取出clob供存储过程用
			p_pro.put("errorcodes", errorcodes.toString());
			p_pro.put("rightcodes", rightcodes.toString());
			p_pro.put("clientid", (String)p.get("clientid"));
			p_pro.put("mainid", (String)p.get("mainid"));
			dao.getSqlMapClientTemplate().insert("sendmsg.sendbatchfj_insert", p_pro);
			//调用分表的存储过程
			dao.getSqlMapClientTemplate().update("sendmsg.proc_p_sendbatch1", p_pro);


	
		insert into t_temp_sendbatchfj (
			rightcodes,errorcodes,clientid,mainid
		) 
		values (
			#rightcodes#,#errorcodes#,#clientid#,#mainid#
		)
	
    
       { call p_sendbatch1(#clientid#,#mainid#)}
     

存储过程中clob的使用:

create or replace procedure p_sendbatch1(in_clientid in varchar2,in_mainid in varchar2)
--clientid在反条数时用,mainid在查正确错误id时用
as 
in_right clob;
in_error clob;
begin 
  select errorcodes,rightcodes into in_error,in_right from t_temp_sendbatchfj where mainid=in_mainid;

....

 --删除clob
    delete from t_temp_sendbatchfj where mainid=in_mainid;
end;


你可能感兴趣的:(Java,Oracle)