首页 文章

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

提问于
浏览
5

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

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;

但我得到这个错误:

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

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

2 回答

  • 3

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

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

  • 8

    您无法直接在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
    

相关问题