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@