匿名块调用返回值列表的oracle sql函数

qxsslcnc  于 7个月前  发布在  Oracle
关注(0)|答案(1)|浏览(81)

我有一个问题,我有一个函数,我需要通过匿名块调用它,但我不知道如何做到这一点。
有人能帮帮我吗
这就是代码:

function x(a number, b date) return AABAAD600_PS.list
is
dichantim_tab AABAAD600_PS.LIST;
anti aabaa_table;
i number := 0;
begin
    dichantim_tab := AABAAD600_PS.LIST();

    for c1_rec in ( cursor)
        loop
            i := i + 1;
            dichantim_tab.extend;
            dichantim_tab(i).ID_ANTI := c1_rec.ID_ANTI;
            ...
            ...
            ...
        end loop;
    return dichantim_tab;

字符串
我试过这个:

select AABAAD620_PS.x (a, sysdate) 
from dual;


和这个:

SELECT * 
FROM TABLE (AABAAD620_PS.x (a, sysdate));


但都不管用

ifmq2ha2

ifmq2ha21#

您说必须从匿名PL/SQL块调用该函数,但没有证据表明您确实这样做了。您发布的两个select语句都在SQL级别工作。
下面是一个模拟这种情况的例子。
函数返回内置集合数据类型:

SQL> create or replace function x (a number)
  2    return sys.odcinumberlist
  3  is
  4    retval sys.odcinumberlist;
  5  begin
  6    select level
  7      bulk collect into retval
  8      from dual
  9      connect by level <= a;
 10    return retval;
 11  end;
 12  /

Function created.

字符串
这是您的第一个select

SQL> select x(3) from dual;

X(3)
--------------------------------------------------------------
ODCINUMBERLIST(1, 2, 3)


这是您的第二个select

SQL> select * from table(x(3));

COLUMN_VALUE
------------
           1
           2
           3


这是一个匿名PL/SQL块。如果你想让它工作,你必须声明一个局部变量,这样它才能接受函数返回的值。我只是显示它的内容。

SQL> set serveroutput on
SQL> declare
  2    result sys.odcinumberlist;
  3  begin
  4    result := x(3);
  5
  6    for i in result.first .. result.last loop
  7      dbms_output.put_line(result(i));
  8    end loop;
  9  end;
 10  /
1
2
3

PL/SQL procedure successfully completed.

SQL>


我想这就是你要找的如果不是,那是什么?

相关问题