PLS-00231:SQL中不能使用函数

Dav*_*lva 6 oracle plsql

我想在不创建包的情况下测试我的流水线功能.以下示例已简化:

DECLARE
    FUNCTION testDC RETURN NCOL PIPELINED IS
    BEGIN
        PIPE ROW(5);
    END;
BEGIN
    FOR cur IN (select * from table (testDC())) LOOP
        dbms_output.put_line('--> ');
    END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

但我得到这个错误:

ORA-06550:第7行,第7列:pls-00231:函数TESTDC不能在SQL
ORA-06550中使用:第7行第7行:PL/SQL:ORA-00904 ::无效标识符
ORA-06550:第7行,第7列:PL/SQL:忽略SQL语句

有什么更好的方法来测试这些功能?

kev*_*sky 9

将流水线功能创建为独立过程或包成员.然后你可以从你的脚本中调用它.

还要确保您引用的NCOL参数在可由调用脚本访问的模式中声明.


Mar*_*ber 5

您无法直接在 PL/SQL 中访问表函数 - 请参阅下面的测试用例。因此,正如其他人指出的那样,您必须将表函数定义为独立函数或打包函数。

 DECLARE
   res NUMBER; 
   FUNCTION testDC RETURN NCOL PIPELINED IS
     BEGIN
         PIPE ROW(5);
     END;

 BEGIN
         res := testDC();
         dbms_output.put_line('--> '||res);

 END;
 /


 ORA-06550: line 3, column 12:
 PLS-00653: aggregate/table functions are not allowed in PL/SQL scope
Run Code Online (Sandbox Code Playgroud)