Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何存储返回sysrefcursor的函数的结果?_Sql_Oracle_Function_Plsql_Cursor - Fatal编程技术网

Sql 如何存储返回sysrefcursor的函数的结果?

Sql 如何存储返回sysrefcursor的函数的结果?,sql,oracle,function,plsql,cursor,Sql,Oracle,Function,Plsql,Cursor,场景:有一个过程,其中有一个游标。 我需要调用一个函数,该函数将从该游标值获取输入,并返回SYS\u REFCURSOR 我需要将函数的结果存储在另一个变量/游标中&需要从过程返回这个值作为out参数 我正在使用Oracle11g 我怎样才能继续 PFB我的方法: create or replace procedure prc_test (p_dept_id in number, c_detail out sysrefcursor)--need to add extra out

场景:有一个过程,其中有一个游标。 我需要调用一个函数,该函数将从该游标值获取输入,并返回
SYS\u REFCURSOR

我需要将函数的结果存储在另一个变量/游标中&需要从过程返回这个值作为out参数

我正在使用Oracle11g

我怎样才能继续

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;
/

这是一个接受varchar2变量并返回refcursor(弱类型)的函数

下面是一个过程,该过程将游标值作为参数传递给函数,返回的游标作为OUT参数传递

 CREATE OR replace PROCEDURE Pr_pass_out_cur(v_2 OUT SYS_REFCURSOR)
IS
  func_arg  VARCHAR2(3);
  other_arg VARCHAR2(3);
  CURSOR c_2 IS
    SELECT 'ABC' col1,
           'DEF' col2
    FROM   dual;
BEGIN
    LOOP
        FETCH c_2 INTO func_arg, other_arg;

        EXIT WHEN c_2%NOTFOUND;

        v_2 := Fn_return_cur(func_arg);
    END LOOP;
EXCEPTION
  WHEN OTHERS THEN
             NULL;
END;

/  

让我知道您的反馈。

到目前为止您做了什么?请显示您的代码。与任何其他数据类型相同:
somevar:=somefunction()什么不起作用?somevar的数据类型是什么?实际上,我的函数将返回一个游标,所以我对varable的数据类型感到困惑?很可能大多数部门都有多个员工:您希望如何处理?另外,如果部门没有员工,您希望发生什么?因为我的需求非常复杂,为了描述我面临的实际挑战,我只创建了一个与我的需求类似的虚拟过程/功能。对不起,我用错桌子了。在我的例子中,两个表中都会有1:1的映射谢谢Kaushik的输入。现在我知道了如何在游标中存储函数的值。
 CREATE OR replace PROCEDURE Pr_pass_out_cur(v_2 OUT SYS_REFCURSOR)
IS
  func_arg  VARCHAR2(3);
  other_arg VARCHAR2(3);
  CURSOR c_2 IS
    SELECT 'ABC' col1,
           'DEF' col2
    FROM   dual;
BEGIN
    LOOP
        FETCH c_2 INTO func_arg, other_arg;

        EXIT WHEN c_2%NOTFOUND;

        v_2 := Fn_return_cur(func_arg);
    END LOOP;
EXCEPTION
  WHEN OTHERS THEN
             NULL;
END;

/