mmu*_*hid 9 oracle plsql plsqldeveloper
我在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;
Run Code Online (Sandbox Code Playgroud)
而我正在下面的测试脚本,测试流水线FN_GET_USERINFO_ROWS在PL/SQL开发人员(文件- >新建- >测试窗口)
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;
Run Code Online (Sandbox Code Playgroud)
但它显示以下错误:
ORA-06550:第28行,第12列:PLS-00653:PL/SQL范围内不允许使用聚合/表函数
如何使用PL/SQL Developer调试流水线函数?
diz*_*iaq 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;
Run Code Online (Sandbox Code Playgroud)
另外我建议你NO_DATA_NEEDED在抛出时调试变种.为此,添加WHERE限制行数的子句.
| 归档时间: |
|
| 查看次数: |
4860 次 |
| 最近记录: |