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;
展开
 我来答
太平岁年丰9
2014-05-18 · TA获得超过1231个赞
知道小有建树答主
回答量:1017
采纳率:100%
帮助的人:1095万
展开全部
如果你过程执行中仅会出现“没查询到记录”这一种情况,你不用数组也能够实现,而且仅扫描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个表,我需要从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个表也是类似的
热血罗密欧
2014-05-18
知道答主
回答量:12
采纳率:0%
帮助的人:1.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;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式