【发布时间】:2023-01-20 16:31:20
【问题描述】:
我有以下过程执行一些业务逻辑(通过游标循环):
PROCEDURE myproc() AS
CURSOR mycur IS
SELECT * FROM mytable;
BEGIN
FOR c IN mycur LOOP
...business logic here...
...many lines of code...
END LOOP;
END myproc;
我想要不同的程序并执行相同不同游标(数据集)的业务逻辑。例如,我想要一个程序 myproc_adopters() 用于:
SELECT * FROM mytable WHERE cutomer_type='Adopters'
和其他人的另一个程序myproc_others():
SELECT * FROM mytable WHERE customer_type!='Adopters'
所以我想要一个包含游标循环和业务逻辑的主过程mainproc(),以及调用该主过程并发送不同游标作为参数的其他过程。问题是游标 FOR 循环似乎不接受游标作为我可以作为过程调用参数发送的变量:
PROCEDURE myproc_adopters() AS
CURSOR mycur IS
SELECT * FROM mytable WHERE customer_type='Adopters';
BEGIN
mainproc(mycur);
END myproc_adopters;
PROCEDURE myproc_others() AS
CURSOR mycur IS
SELECT * FROM mytable WHERE customer_type!='Adopters';
BEGIN
mainproc(mycur);
END myproc_others;
PROCEDURE mainproc(mycur IN SYS_REFCURSOR) AS
BEGIN
FOR c IN mycur LOOP <-- does not accept cursor as variable
...
END LOOP;
END mainproc;
如何将不同的游标发送到同一个游标FOR LOOP?
【问题讨论】: