gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 03:42:56 33 4
gpt4 key购买 nike

我在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;

我正在运行以下测试脚本来在 上测试流水线的 FN_GET_USERINFO_ROWS PL/SQL Developer ("file"->“新建”->“测试窗口”)
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子句来限制行数。

关于oracle - 如何在PL/SQL Developer中调试流水线函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35128472/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com