如何编写返回结果集的存储过程? 我无法理解问题的含义 而且我需要一个例子来简单地理解。
答案 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;
/