gpt4 book ai didi

plsql - 我可以将显式游标传递给函数/过程以在 FOR 循环中使用吗?

转载 作者:行者123 更新时间:2023-12-01 22:34:50 25 4
gpt4 key购买 nike

我有一个过程,可以对游标返回的所有记录执行一些计算。它看起来有点像这样:

PROCEDURE do_calc(id table.id_column%TYPE)
IS
CURSOR c IS
SELECT col1, col2, col3
FROM table
WHERE ...;
BEGIN
FOR r IN c LOOP
-- do some complicated calculations using r.col1, r.col2, r.col3 etc.
END LOOP;
END;

现在,我需要对来自不同表的不同记录集执行完全相同的计算。但是,它们具有与上面示例中相同的“形状”。

是否可以编写如下所示的过程:

PROCEDURE do_calc2(c some_cursor_type)
IS
BEGIN
FOR r IN c LOOP
-- do the calc, knowing we have r.col1, r.col2, r.col3, etc.
END LOOP;
END;

我了解 SYS_REFCURSOR,但我想知道是否可以使用更方便的 FOR ... LOOP 语法和隐式记录类型。

最佳答案

创建一个包。

将光标声明为包变量。

使用%rowtype设置函数参数类型。

create or replace package test is
cursor c is select 1 as one, 2 as two from dual;

procedure test1;
function test2(test_record c%ROWTYPE) return number;

end test;


create or replace package body test is
procedure test1 is
begin
for r in c loop
dbms_output.put_line(test2(r));
end loop;
end;

function test2(test_record c%ROWTYPE) return number is
l_summ number;
begin
l_summ := test_record.one + test_record.two;
return l_summ;
end;
end test;

关于plsql - 我可以将显式游标传递给函数/过程以在 FOR 循环中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629802/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com