如何编写返回结果集的存储过程

时间:2015-12-16 12:57:51

标签: oracle plsql oracle11g

如何编写返回结果集的存储过程?   我无法理解问题的含义 而且我需要一个例子来简单地理解。

1 个答案:

答案 0 :(得分:1)

CREATE PROCEDURE get_Cursor(
  o_cursor OUT SYS_REFCURSOR
)
IS
BEGIN
  OPEN o_cursor FOR
  SELECT 'X' AS VALUE FROM DUAL;
END;
/
SHOW ERRORS;

如果您想要致电PROCEDURE并获得结果,您可以这样做:

VARIABLE cur REFCURSOR;

BEGIN
  get_Cursor( :cur );
END;
/

PRINT cur;

将输出:

CUR
---
VALUE
-----
X

<强>更新

超出OP的范围,但要回答关于如何打印它的问题:

CREATE PROCEDURE print_Cursor(
  i_cursor IN SYS_REFCURSOR
)
IS
  p_value VARCHAR2(20);
BEGIN
  LOOP
    FETCH i_cursor INTO p_value;
    EXIT WHEN i_cursor%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE( p_value );
  END LOOP;
END;
/

SET SERVEROUTPUT ON;

DECLARE
  p_cursor SYS_REFCURSOR;
BEGIN
  get_Cursor( p_cursor );
  print_Cursor( p_cursor );
END;
/