各位大侠:你们好!
现在碰到这个问题,网上都说是给不该为空的字段插入了空值。但是我反复检查了,我插入的确实有值。下面是我的存储过程代码和测试参数(my_varArray为我定义的一种数组类型):
1 create or replace procedure w_rldyrbmxb_save(arr IN my_varArray,result OUT VARCHAR2) AS
2 strArr my_varArray:=my_varArray();
--1-DYBH,2-GMDW,3-SJ,4-FZ,5-SL,6-JZ,7-YK,8-DWD,PZBM-9,KFRQ-10 strArr中共含有10个元素
3 li_flag INTEGER;--0表示没有记录 非0则表示有记录
4 BEGIN
5 for m in 1..arr.count
6 loop
7 strArr.extend;
8 strArr(m):=arr(m);
9 end loop;
10 select count(*) into li_flag from hc_rldyrbmxb_temp where DYBH = strArr(1);--strArr(1)表示调运编号
if li_flag=0 then --没有记录 插入
11 insert into hc_rldyrbmxb_temp(DYBH,GMDW,SJ,FZ,SL,JZ,YK,DWD,PZBM,KFRQ) values (strArr(1),strArr(2),to_date(strArr(3),'YYYY-MM-DD'),strArr(4),strArr(5),strArr(6),strArr(7),strArr(8),strArr(9),to_date(strArr(10),'YYYY-MM-DD'));
12 else --有记录 更新
update hc_rldyrbmxb_temp set GMDW=strArr(2),SJ=to_date(strArr(3),'YYYY-MM-DD'),FZ=strArr(4),SL=strArr(5),JZ=strArr(6),YK=strArr(7),DWD=strArr(8),PZBM=strArr(9),KFRQ=to_date(strArr(10),'YYYY-MM-DD') where DYBH =strArr(1);
13 end if;
14 if sqlcode=0 then --没有错误 提交事务
15 result:='保存数据成功!';
16 commit;
17 else --有错误的话 撤销事务
18 result:=sqlerrm;
19 rollback;
20 end if;
21 END w_rldyrbmxb_save;
在PL/SQL中测试这个存储过程的参数为:
arr:=my_vararray('20110609003','七星公司','2011-06-09','合 阳','11','1.00','0.00','','040000000001','2011-06-07');
测试结果是正确的,然而用java代码去调用这个存储过程的时候总是报 ora-01400:无法将 NULL 插入 ("SYSTEM"."HC_RLDYRBMXB_TEMP"."DYBH"),下面为我的java代码:
参数arr[]:数组参数包含10个元素 ,sqlText为call w_rldyrbmxb_save(?,?)
public String w_rldyrbmxb_save(String arr[], String sqlText) {