问题描述
CREATE or replace PROCEDURE return_result_set ( )
LANGUAGE SQL
SPECIFIC return_result_set
DYNAMIC RESULT SETS 1
rrs: BEGIN
DECLARE rs_cur CURSOR WITH RETURN
FOR SELECT *
FROM dummytable;
OPEN rs_cur;
END rrs
我可以使用上面的存储过程使用游标返回结果集,但是我想在存储过程中使用cursor variable (Weakly-typed),因为选择查询和表将根据条件而变化。示例代码here似乎是针对不同的用例。
如何使用游标变量返回结果集?
解决方法
按原样尝试:
--#SET TERMINATOR @
SET SERVEROUTPUT ON@
BEGIN
DECLARE V_C1 CURSOR;
DECLARE V_I INT;
DECLARE PROCEDURE L_PROC(OUT LP_C1 CURSOR)
BEGIN
-- Dynamic cursor
--DECLARE V_STMT VARCHAR(128) DEFAULT 'SELECT * FROM (VALUES 1) T(I)';
--PREPARE V_S1 FROM V_STMT;
--SET LP_C1 = CURSOR FOR V_S1;
-- Static cursor
SET LP_C1 = CURSOR FOR SELECT * FROM (VALUES 1) T(I);
OPEN LP_C1;
END;
CALL L_PROC(V_C1);
FETCH V_C1 INTO V_I;
CALL DBMS_OUTPUT.PUT_LINE('I: ' || V_I);
CLOSE V_C1;
END@
SET SERVEROUTPUT OFF@