ata*_*ata 3 oracle plsql function cursor
我有一个返回 SYS_REFCURSOR 的函数,该函数将从不同的包中调用,我们不想在多个位置重复游标定义。
FUNCTION f_get_cur(p_date DATE, p_code VARCHAR(10)) RETURN SYS_REFCURSOR IS
cur_s SYS_REFCURSOR;
BEGIN
OPEN cur_s FOR
SELECT .blah blah etc etc
return cur_s;
END f_get_cur;
Run Code Online (Sandbox Code Playgroud)
编译正常,但是当我想在 FOR 循环中使用该函数(通常将光标放在其中)时,出现以下错误
错误:PLS-00456:项目“f_get_cur”不是游标
我正在尝试像这样打开光标......
FOR cc_rec IN f_get_cur(c_date, p_c_code) LOOP
Run Code Online (Sandbox Code Playgroud)
我使用了错误的数据类型吗?还有其他方法可以实现我正在尝试的目标吗?
您需要以不同的方式处理返回的游标;例如:
SQL> create or replace FUNCTION f_get_cur(p_date DATE, p_code VARCHAR) RETURN SYS_REFCURSOR IS
2 cur_s SYS_REFCURSOR;
3 BEGIN
4 OPEN cur_s FOR
5 SELECT to_char(p_date, 'dd-mm-yyyy') || p_code val from dual;
6
7 return cur_s;
8 END f_get_cur;
9 /
Function created.
SQL> declare
2 cur_s SYS_REFCURSOR;
3 v varchar2(100);
4 begin
5 cur_s := f_get_cur(sysdate, 'xx');
6 loop
7 fetch cur_s into v;
8 exit when cur_s%NOTFOUND;
9 dbms_output.put_line(v);
10 end loop;
11 end;
12 /
30-04-2019xx
PL/SQL procedure successfully completed.
SQL>
Run Code Online (Sandbox Code Playgroud)