oracle 存储过程 into 没找到数据 解决办法 50
需要查询到10个不同的表,根据条件分别查询到每个表里的一个字段requestid的数据。我是将查询到的数据保存在数组里,但是如果有个表里没有数据,将会出现异常。求解决办法...
需要查询到10个不同的表,根据条件分别查询到每个表里的一个字段requestid的数据。我是将查询到的数据保存在数组里, 但是如果有个表里没有数据,将会出现异常。求解决办法!如果有其他更好的方法可以保存这10个表里的数据更好!
附上部分代码:
create or replace procedure proc_test(
client_no varchar2
) is
TYPE requestid_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
requestids requestid_array;
begin
FOR i IN 1..12 LOOP
requestids(i):=1;
END LOOP;
select a.requestid into requestids(1) from formtable_main_206 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
raise_application_error(-20000, 'z');--如果没查询到记录,将不会执行这条语句
select a.requestid into requestids(2) from formtable_main_240 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
select a.requestid into requestids(3) from formtable_main_222 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
FOR i IN 1..requestids.count LOOP
update workflow_currentoperator t set t.userid=user_id where requestid=requestids(i) and t.isremark =0;
END LOOP;
end proc_test; 展开
附上部分代码:
create or replace procedure proc_test(
client_no varchar2
) is
TYPE requestid_array IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
requestids requestid_array;
begin
FOR i IN 1..12 LOOP
requestids(i):=1;
END LOOP;
select a.requestid into requestids(1) from formtable_main_206 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
raise_application_error(-20000, 'z');--如果没查询到记录,将不会执行这条语句
select a.requestid into requestids(2) from formtable_main_240 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
select a.requestid into requestids(3) from formtable_main_222 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
FOR i IN 1..requestids.count LOOP
update workflow_currentoperator t set t.userid=user_id where requestid=requestids(i) and t.isremark =0;
END LOOP;
end proc_test; 展开
展开全部
如果你过程执行中仅会出现“没查询到记录”这一种情况,你不用数组也能够实现,而且仅扫描workflow_currentoperator 表一遍,性能会提高
过程里直接根据10个表更新workflow_currentoperator ,如下:
update workflow_currentoperator t set t.userid=(select user_id from formtable_main_206 a
where a.requestid=t.requestid and a.clientno=client_no)
where t.isremark=0;
......
过程里直接根据10个表更新workflow_currentoperator ,如下:
update workflow_currentoperator t set t.userid=(select user_id from formtable_main_206 a
where a.requestid=t.requestid and a.clientno=client_no)
where t.isremark=0;
......
追问
但是有10个表,我需要从10个表里找到他们分别条件满足的requestid 然后再把找到的requestid作为条件来更新workflow_currentoperator。 你说直接根据10个表更新是什么意思。。没看懂、
追答
根据formtable_main_*这样的10个表更新,你只要写10个update就可以了,没有必要用数组和for循环
update workflow_currentoperator t set t.userid=(select user_id from formtable_main_206 a
where a.requestid=t.requestid and a.clientno=client_no)
where t.isremark=0;
update workflow_currentoperator t set t.userid=(select user_id from formtable_main_240 a
where a.requestid=t.requestid and a.clientno=client_no)
where t.isremark=0;
update workflow_currentoperator t set t.userid=(select user_id from formtable_main_222 a
where a.requestid=t.requestid and a.clientno=client_no)
where t.isremark=0;
下面还有7个表也是类似的
展开全部
select nvl(a.requestid,0) into requestids(1) from formtable_main_206 a,workflow_currentoperator b
更多追问追答
追问
这个方法我试过,没用 查不到数据也不是null
追答
那你加个异常
begin
select a.requestid into requestids(1) from formtable_main_206 a,workflow_currentoperator b
where a.requestid=b.requestid and b.isremark=0 and a.clientno=client_no;
exception
null;
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询