Sql 我想获取DB2中游标中的行数

Sql 我想获取DB2中游标中的行数,sql,db2,Sql,Db2,上面是我的代码,但下面显示了错误 CREATE OR REPLACE PROCEDURE USP_TEST_ROW_COUNT( OUT vROW_COUNT BIGINT ) RESULT SETS 1 MODIFIES SQL DATA LANGUAGE SQL P1: BEGIN ATOMIC BEGIN DECLARE C1 CURSOR WITH RETURN FOR SELECT * FROM TABLE_NAME; OPEN C1;

上面是我的代码,但下面显示了错误

CREATE OR REPLACE PROCEDURE USP_TEST_ROW_COUNT(
OUT vROW_COUNT BIGINT
)
RESULT SETS 1
    MODIFIES SQL DATA 
    LANGUAGE SQL
P1: BEGIN ATOMIC
BEGIN
    DECLARE C1 CURSOR WITH RETURN FOR
    SELECT * FROM TABLE_NAME;
    OPEN C1;
    SET vROW_COUNT = CURSOR_ROWCOUNT(C1);
END;
END P1
请提供帮助。

只能返回(由存储过程的调用者)获取的行数。这与结果集中的行数不同。因此,如果您的语法被接受,那么初始值将为零,因为尚未提取任何内容

您可以看到一个示例,其中显示了cursor变量、打开和获取的游标以及cursor\u ROWCOUNT返回的结果值


要查找结果集中的行数,请使用光标(获取,直到不再有行),或执行第二次查询,对同一工作单元中的行进行计数,或者将计数附加到每一行并仅获取一行。

如果要返回结果集中的所有行并同时返回输出行数,可以将结果插入某些DGTT中:

DB2 SQL error: SQLCODE: -206, SQLSTATE: 42703, SQLERRMC: C1
 Message: "C1" is not valid in the context where it is used.
 Line: 12

CURSOR\u ROWCOUNT只能返回获取的行数(这与结果集中的行数不同)。可以给我任何建议,以使用相同的代码获取CURSOR中存储的记录数吗?我无法修改已检查的SP@MAO,但我需要的是问题的解决方案,而不是函数描述。
CREATE OR REPLACE PROCEDURE USP_TEST_ROW_COUNT(OUT vROW_COUNT BIGINT)
RESULT SETS 1
MODIFIES SQL DATA 
BEGIN ATOMIC
  DECLARE v_stab VARCHAR(100) DEFAULT 'SESSION.USP_TEST_ROW_COUNT';
  DECLARE v_stmt VARCHAR(100) DEFAULT 'SELECT * FROM TABLE_NAME';
  DECLARE C1 CURSOR WITH RETURN FOR S1;

  EXECUTE IMMEDIATE 
    'DECLARE GLOBAL TEMPORARY TABLE '||v_stab||' AS ('
  ||v_stmt
  ||' ) DEFINITION ONLY WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED';
  EXECUTE IMMEDIATE 'INSERT INTO '||v_stab||' '||v_stmt;
  GET DIAGNOSTICS vROW_COUNT=ROW_COUNT;

  PREPARE S1 FROM 'SELECT * FROM '||v_stab;
  OPEN C1;
END@