创建或替换程序USP_TEST_ROW_COUNT(OUT vROW_COUNT BIGINT)结果集1 修改SQL数据 语言SQLP1:开始原子开始 DECLARE C1 CURSOR with RETURN FOR 选择 * …
如果要返回结果集中的所有行并同时返回输出行数,可以将结果插入某些DGTT:
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@
CURSOR_ROWCOUNT 只能返回获取的行数(由存储过程的调用者)。这与结果集中的行数不同。因此,如果您的语法被接受,则该值最初为零,因为尚未提取。
你可以看一个例子 这里 ,它显示了游标变量,正在打开和获取游标,以及CURSOR_ROWCOUNT返回的结果值。
要查找结果集中的行数,请使用游标(获取直到不再有行),或者执行第二个查询来计算同一工作单元中的行,或者将计数附加到每一行并仅获取1行。