我需要创建一个函数,它允许我返回与 SELECT 查询相同的结果,并且包含 pl/sql 代码。
我尝试了一些非常简单的东西:
create or replace FUNCTION test
RETURN SYS_REFCURSOR
IS
l_rc SYS_REFCURSOR;
BEGIN
OPEN l_rc
FOR SELECT *
FROM my_table;
RETURN l_rc;
END;
但是当我使用
SELECT test from dual;
调用我的函数时,我会在单个单元格中获得 my_table
的所有结果,而不是将每一列分开。
有办法做我想做的事吗?
理想情况下,我想要一个视图,但似乎无法添加逻辑条件。
该函数必须是流水线的。例如:
TYPE MyType IS RECORD(ID NUMBER);
TYPE MyTableType IS TABLE OF MyType;
Function MyFunction(Arguments) return MyTableType pipelined is
Cursor Cur is select * from whetever;
R Cur%rowtype;
Begin
Open cur;
loop
fetch Cur into R;
exit when Cur%notfound;
pipe row(R);
End loop;
Close cur;
End MyFunction;
然后您可以通过以下方式调用:
select * from table(MyFunction(Arguments));
最简单的方法是让函数保持原样,只正确调用它:
create table my_table (id, memo) as
select 1, 'some memo' from dual
/
create or replace function MyTableById (id int) return sys_refcursor is
rc sys_refcursor;
begin
open rc for
select * from my_table where id=MyTableById.id;
return rc;
end;
/
var rc refcursor
exec :rc := MyTableById (1);
print rc
ID MEMO
---------- ---------
1 some memo