【发布时间】:2017-12-29 01:05:28
【问题描述】:
场景:有一个过程,里面有一个游标。
我需要调用一个函数,该函数将从该光标值中获取输入并返回 SYS_REFCURSOR。
我需要将该函数的结果存储在不同的变量/游标中,并且需要从过程中将该值作为输出参数返回。
我正在使用 Oracle 11g。
我该如何继续?
PFB 我的方法:
create or replace procedure prc_test
(p_dept_id in number,
c_detail out sysrefcursor)--need to add extra out parameter
as
var1 varchar2(200) :=null;
begin
open c_detail for
select -1 from dual;
if p_dept_id is not null then
open c_detail for
select emp_no from emp
where dept_id=p_dept_id;
--i need to retrn value of 'get_emp_dtls' function as out parameter.
end if;
end procedure;
/
要调用的函数
CREATE OR REPLACE FUNCTION get_emp_dtls
(p_emp_no IN EMP.EMP_NO%TYPE)
RETURN SYS_REFCURSOR
AS
o_cursor SYS_REFCURSOR;
BEGIN
OPEN o_cursor FOR
SELECT
ENAME,
JOB
FROM emp
WHERE EMP_NO = p_emp_no;
RETURN o_cursor;
-- exception part
END;
/
【问题讨论】:
-
你到现在都做了什么?请出示您的代码。
-
与任何其他数据类型相同:
somevar := somefunction();什么不起作用? -
somevar 的数据类型是什么?实际上我的函数会返回一个游标,所以我对变量的数据类型感到困惑?
-
大多数部门可能有不止一名员工:您想如何处理?另外,如果部门没有员工,你想怎么办?
-
由于我的要求非常复杂,为了描述我面临的实际挑战,我只是创建了一个类似于我的要求的虚拟程序/函数。对不起,我用错了桌子。在我的情况下,两个表中都会有 1:1 映射
标签: sql oracle function plsql cursor