【问题标题】:returning value to cursor plsql将值返回到游标 plsql
【发布时间】:2016-06-10 07:36:47
【问题描述】:

嗨,我有一个过程,它在输出中使用游标返回记录集我想要做的是我使用游标来获取数据并且同样必须将它返回到输出游标。我可以像下面那样做

PROCEDURE test(value_one IN someTabel.somecolumn%TYPE,                             
           valu_two   IN someTabel.somecolumn%TYPE,
           Outputcursor OUT SYS_REFCURSOR) IS
mydeclaration goes here 
output_value_one sometable.somecolumn%Type;
---
cursor test_select is 
select statement
begin 
for val in test_select loop 
fetch test_select into output_value_one; -- I want my cursor outputcursor to     be return instead of output_value_one 
end loop;
end;

【问题讨论】:

  • 这个问题目前没有任何意义。您没有用于 test_select 游标的选择示例,也没有显示它与输出游标的关系。我怀疑您想要的是返回一个引用游标,该游标涉及 test_select 游标本身或与 test_select 游标的选择查询的连接。请更新您的问题,使其更具体,届时我们可能会为您提供帮助。

标签: plsql cursor


【解决方案1】:

您将光标发送到deptno,返回您可以从前端处理的查询。

 create or replace Procedure Transproc(p_deptno    IN  emp.deptno%TYPE,
                        Outputcursor Out Sys_Refcursor,
                        p_recordset Out Varchar) 
            Is
            Vquery varchar2(200);
            Begin
            Vquery:='select * from emp where deptno='|| p_deptno ||'';

            Open Outputcursor For Vquery;
            OMessage:='Success';
            Exception 
            When others then 
            OMessage:='Fail';
            End;

或根据您的要求尝试以下一种。

CREATE OR REPLACE PROCEDURE get_emp_rs (p_deptno    IN  emp.deptno%TYPE,
                      p_recordset OUT SYS_REFCURSOR) AS 
BEGIN 
  OPEN p_recordset FOR
    SELECT ename,
           empno,
           deptno
    FROM   emp
    WHERE  deptno = p_deptno
    ORDER BY ename;
END GetEmpRS;
/

测试:-

SET SERVEROUTPUT ON SIZE 1000000
DECLARE
  l_cursor  SYS_REFCURSOR;
  l_ename   emp.ename%TYPE;
  l_empno   emp.empno%TYPE;
  l_deptno  emp.deptno%TYPE;
BEGIN
  get_emp_rs (p_deptno    => 30,
              p_recordset => l_cursor);

  LOOP 
    FETCH l_cursor
    INTO  l_ename, l_empno, l_deptno;
    EXIT WHEN l_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(l_ename || ' | ' || l_empno || ' | ' || l_deptno);
  END LOOP;
  CLOSE l_cursor;
End;
/

【讨论】:

  • 最好使用绑定变量:Vquery:='select * from emp where deptno=:p_dept';然后使用 p_deptno 打开 Outputcursor For Vquery;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多