Db2 使用弱类型游标变量返回结果集

Db2 使用弱类型游标变量返回结果集,db2,db2-luw,database-cursor,Db2,Db2 Luw,Database Cursor,通过使用上述存储过程,我可以使用游标返回结果集,但我希望在存储过程中使用,因为select查询和表将根据条件而变化。示例代码似乎适用于不同的用例 如何使用游标变量返回结果集?按原样尝试: CREATE or replace PROCEDURE return_result_set ( ) LANGUAGE SQL SPECIFIC return_result_set DYNAMIC RESULT SETS 1 rrs: BEGIN

通过使用上述存储过程,我可以使用游标返回结果集,但我希望在存储过程中使用,因为select查询和表将根据条件而变化。示例代码似乎适用于不同的用例

如何使用游标变量返回结果集?

按原样尝试:

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

您链接到的示例在什么方面不适合您?您的问题显示了用于游标的静态SQL语句。您知道哪种编程语言将使用您的结果集吗?这很重要,因为如果您真的想使用弱类型游标变量,那么只有SQL调用方才能使用这样的游标。您可能只需要在过程中使用动态SQL而不是静态SQL。感谢您的回复。。。正如mao所建议的,此存储过程的调用方是非sql调用方(Java和Express Js)。在这种情况下,我不能使用星期/强类型游标中的任何一个吗?在这种情况下,我怎样才能最好地返回结果集而不使用动态sql..我不明白,为什么需要游标变量,为什么不能使用上面提供的代码。您可以使用静态sql声明任意数量的不同游标,但只打开并有条件返回其中一个游标。您甚至可以有条件地声明一个游标。
--#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@