创建函数返回sys_refcursor

时间:2019-02-21 02:29:40

标签: oracle

如何创建一个功能来显示一个部门的所有员工? 我试过了这段代码,但它只返回“游标”值。

CREATE OR REPLACE FUNCTION emp_dept (dept_id IN NUMBER)
RETURN SYS_REFCURSOR
IS 
emp_name SYS_REFCURSOR;

BEGIN
OPEN emp_name
FOR SELECT last_name
     FROM employees
    WHERE department_id = dept_id;

RETURN emp_name;
END emp_dept;

1 个答案:

答案 0 :(得分:1)

您可以使用这些选项来读取和显示函数返回的光标的输出。

使用简单的选择

select emp_dept(10) from dual;

结果

EMP_DEPT(10)        
--------------------
CURSOR STATEMENT : 1

CURSOR STATEMENT : 1

LAST_NAME                
-------------------------
Whalen

使用DBMS_SQL.RETURN_RESULT(Oracle 12c及更高版本)

DECLARE
l_cur SYS_REFCURSOR := emp_dept(10) ;
BEGIN
   DBMS_SQL.RETURN_RESULt(l_cur);
END;
/

结果

PL/SQL procedure successfully completed.

ResultSet #1


LAST_NAME                
-------------------------
Whalen

FETCH从光标进入本地集合。略有变化也可以用于获取标量变量。

DECLARE
l_cur SYS_REFCURSOR := emp_dept(10) ;
TYPE l_last_name_tab IS TABLE OF employees.last_name%TYPE;
l_lnt l_last_name_tab;
BEGIN
   FETCH l_cur BULK COLLECT INTO l_lnt;

   for i in 1..l_lnt.count
   loop
    dbms_output.put_line(l_lnt(i));
   end loop;
END;
/

结果

Whalen


PL/SQL procedure successfully completed.