如何在PL / SQL Developer中调试流水线函数?

时间:2016-02-01 10:42:20

标签: oracle plsql plsqldeveloper

我在oracle数据库中有一个PL / SQL包,其中包含一个名为 FN_GET_USERINFO_ROWS 的流水线函数,如下所示:

L.Map

我正在运行以下测试脚本来测试 PL/SQL Developer 上的流水线 FN_GET_USERINFO_ROWS File-> New-> Test窗口

setBounds

但它显示以下错误:

  

ORA-06550:第28行,第12列:PLS-00653:聚合/表函数   PL / SQL范围中不允许使用

如何使用 PL/SQL Developer 调试流水线功能?

1 个答案:

答案 0 :(得分:11)

其中一种方法是使用FOR-SELECT-LOOP创建一个块并在函数中放置一个断点,或者只记录每个读取行的内容(取决于调试的含义)。因此,您可以将每个PIPE ROW执行分开并查看其结果。
然后在 PL / SQL Dev 中选择 File-> Open-> TestScript 并从打开的窗口运行块。

DECLARE      
  result pkg_userinfo.ty_userinfo_table;
BEGIN
  -- we call pipelined functions like this

  FOR rec IN (SELECT *
                FROM TABLE (pkg_userinfo.fn_get_userinfo_rows(:P_USER_ID))
            -- WHERE rownum < 2
            -- uncomment this line and vary amount of fetched rows
             )
  LOOP
    dbms_output.put_line('another step : ' || rec.u_id);
  END LOOP;

END;

另外,我建议您在抛出NO_DATA_NEEDED时调试变体。为此,添加限制行数的WHERE子句。