【发布时间】:2020-07-11 09:46:37
【问题描述】:
我是 PL/SQL 新手,对函数的输出值有疑问。
我想在函数中执行一条 SQL 语句并返回结果。该函数将使用以下命令执行:select * from table(mypkg.execute_query('1'));
我使用以下文章作为参考"Bulk Collect Into" and "Execute Immediate" in Oracle,但没有成功。
看来我使用了错误的数据类型。系统在以下行返回问题:PIPE Row(results)
create or replace package mypkg
as
type node is table of edges%ROWTYPE;
function execute_query (startNode in varchar2) RETURN node PIPELINED;
end;
create or replace package body mypkg
as
function execute_query(startNode in varchar2) RETURN node PIPELINED
AS
results node;
my_query VARCHAR2(100);
output VARCHAR2(1000);
c sys_refcursor;
BEGIN
my_query := 'SELECT DISTINCT * FROM EDGES WHERE src='|| startNode;
open c for my_query;
loop
fetch c bulk collect into results limit 100;
exit when c%notfound;
PIPE Row(results);
end loop;
close c;
END;
end;
我用光标尝试了几个选项,但无法返回值。如果您知道如何使用 PIPELINED 以外的方式返回数据,请告诉我。
感谢您的支持!
【问题讨论】: