Fra*_*dor 2 conditional plsql for-loop procedure oracle11g
我有一个select语句,我试图循环并根据select语句的条件递增一个变量,然后返回变量作为一个out
所以我可以在一些前端代码中用它做一些事情.我正在使用oracle 11g,我正在看到一些方法可以做到这一点......但我不确定哪种方式最好.我有一些我想在下面做的事情,但由于混乱而再次停止.
首先我设置我的proc和'in variable'
PROCEDURE SEEKER (pMonkeyID IN Number, vMarkCounter OUT Number)
AS
BEGIN
CURSOR seeker_cur IS
Select Mokney_approved, Monkey_vaulted
from MonkeyBookApps
where MonkeyID = pMonkeyID
and Monkey_doc_type = 'BANANA'
order by docu_approv_timestamp,monkey_doc_type,monkey_doc_approved desc
OPEN seeker_cur;
begin
OPEN Seeker_cur;
vMarkCounter := 0;
Run Code Online (Sandbox Code Playgroud)
这是我不确定的部分.如果条件不满足,我应该循环然后退出,还是应该执行if语句并以某种方式确定是否有可能大于1的记录?如果是这样,那将如何运作?一种方式比另一种方式有益处吗?所以...我要sudo-code我要做的事情(下面):
FOR (however many records) in Seeker_cur
IF seeker_cur (not found) or (returns no records)
EXIT or (break for loop);
ELSE
LOOP
vMarkCounter := vMarkCounter + 1;
EXIT WHEN seeker_cur is out of records (somehow)
END IF;
END LOOP;
END;
END SEEKER;
Run Code Online (Sandbox Code Playgroud)
我相信有几种方法可以做到这一点.你会建议什么方式?
为什么不使用隐式游标,它会打开和关闭自己:
DECLARE
CURSOR seeker_cur IS
Select Mokney_approved, Monkey_vaulted
from MonkeyBookApps
where MonkeyID = pMonkeyID
and Monkey_doc_type = 'BANANA'
order by docu_approv_timestamp,monkey_doc_type,monkey_doc_approved desc;
vMarkCounter number:=0;
BEGIN
FOR i IN seeker_cur
LOOP
vMarkCounter := vMarkCounter+1;
END LOOP;
dbms_output.put_line(vMarkCounter);
END;
Run Code Online (Sandbox Code Playgroud)