将返回从select查询中检索的数据的函数 - Oracle

mac*_*cha 10 oracle plsql stored-procedures return function

我正在尝试编写一个返回select查询结果的函数.我使用过非常基本的函数来返回一个数字和一个varchar2(字符串).但是现在我想返回一个select的结果,就像10行及其相应的列一样.

我将如何编写函数以及返回类型是什么?

我写的一个示例函数是:

创建或替换函数func1将varchar2作为begin return返回('hello from func1'); 结束func1;

我仍处于基本级别,所以有人可以帮我退出选择查询的结果吗?我相信会使用游标,因为会有不止一行.

Jus*_*ave 17

通常,函数返回单个"事物".通常,这是一个标量(数字,varchar2,记录等),但您可以返回一个集合.因此,例如,您可以返回一个集合(在本例中为嵌套表),其中包含EMP表中的所有EMPNO值

CREATE TYPE empno_tbl 
    IS TABLE OF NUMBER;

CREATE OR REPLACE FUNCTION get_empnos
  RETURN empno_tbl
IS
  l_empnos empno_tbl;
BEGIN
  SELECT empno
    BULK COLLECT INTO l_empnos
    FROM emp;
  RETURN l_empnos;
END;
Run Code Online (Sandbox Code Playgroud)

但这在函数中并不常见.让函数返回游标而不是返回值并让调用者处理获取数据会更常见,即

CREATE OR REPLACE FUNCTION get_empnos2
  RETURN SYS_REFCURSOR
IS
  l_rc SYS_REFCURSOR;
BEGIN
  OPEN l_rc
   FOR SELECT empno
         FROM emp;
  RETURN l_rc;
END;
Run Code Online (Sandbox Code Playgroud)

但即便如此,在Oracle中并不常见.根据您要完成的任务,通常更常见的是创建一个视图来选择您感兴趣的数据并查询该视图而不是调用函数或过程.