如何使用 oracle 函数返回 SELECT 查询?

Nat*_*ots 2 sql oracle plsql

我需要创建一个函数,该函数允许我返回与 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;
Run Code Online (Sandbox Code Playgroud)

但是,当我使用 调用函数时,我从单个单元格中SELECT test from dual;获取所有结果,而不是将每列分开。my_table

有办法做我想做的事吗?

理想情况下,我想要一个视图,但似乎无法添加逻辑条件。

Tho*_*ton 5

该函数必须被流水线化。例如 :

    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;
Run Code Online (Sandbox Code Playgroud)

然后你可以通过以下方式调用它:

    select * from table(MyFunction(Arguments));
Run Code Online (Sandbox Code Playgroud)