微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我在oracle数据库中有一个PL / sql包,它包含一个名为FN_GET_USERINFO_ROWS的流水线函数,如下所示:
CREATE OR REPLACE PACKAGE PKG_USERINFO AS

  TYPE TY_USERINFO_RECORD IS RECORD( U_ID    VARCHAR2(50),U_NAME  VARCHAR2(50),dob     DATE);     
  TYPE TY_USERINFO_TABLE IS TABLE OF TY_USERINFO_RECORD;


  FUNCTION FN_GET_USERINFO_ROWS(P_USER_ID IN NUMBER)
    RETURN TY_USERINFO_TABLE PIPELINED;

END PKG_USERINFO;

我正在运行以下测试脚本以在PL/SQL Developer测试流水线FN_GET_USERINFO_ROWS(文件 – >新 – >测试窗口)

declare
  result PKG_USERINFO.TY_USERINFO_TABLE;
begin
  -- calling pipelined function
  result := PKG_USERINFO.FN_GET_USERINFO_ROWS(P_USER_ID => :P_USER_ID);
end;

但它显示以下错误

ORA-06550: line 28,column 12: PLS-00653: aggregate/table functions
are not allowed in PL/sql scope

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

其中一种方法是使用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子句限制行数.

原文地址:https://www.jb51.cc/oracle/205247.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐