在 Cursor 上使用条件,当它在 DB2 中为 Emty( NOT FOUND)
Using condition on Cursor, when it's Emty( NOT FOUND) in DB2
我想像在 Oracle 中一样在 Cursor 上设置条件 (IF cur%NOTFOUND THEN ..)。
我尝试在 DB2 中使用此代码:
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN ATOMIC
DECLARE V_DESCRIPTION_1 VARCHAR(4000);
DECLARE V_DESCRIPTION_2 VARCHAR(4000);
DECLARE sys cursor FOR select DESCRIPTION_1, DESCRIPTION_2 from DESC;
open sys;
TEST:
LOOP
IF (sys IS NOT FOUND) THEN // **error in this line**
LEAVE TEST;
END IF;
fetch FROM sys INTO V_DESCRIPTION_1,V_DESCRIPTION_2;
-- other treatments
END IF;
END LOOP TEST;
close sys;
END;
我遇到了这个错误:
SQL0206N "SYS" is not valid in the context where it is used. LINE NUMBER=15.
SQLSTATE=42703
我用 Select 语句替换了光标,我的问题就解决了:
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN ATOMIC
DECLARE V_DESCRIPTION_1 VARCHAR(4000);
DECLARE V_DESCRIPTION_2 VARCHAR(4000);
FOR v_row AS select DESCRIPTION_1, DESCRIPTION_2 from DESC DO
-- other treatments
END FOR;
END;
我想像在 Oracle 中一样在 Cursor 上设置条件 (IF cur%NOTFOUND THEN ..)。 我尝试在 DB2 中使用此代码:
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN ATOMIC
DECLARE V_DESCRIPTION_1 VARCHAR(4000);
DECLARE V_DESCRIPTION_2 VARCHAR(4000);
DECLARE sys cursor FOR select DESCRIPTION_1, DESCRIPTION_2 from DESC;
open sys;
TEST:
LOOP
IF (sys IS NOT FOUND) THEN // **error in this line**
LEAVE TEST;
END IF;
fetch FROM sys INTO V_DESCRIPTION_1,V_DESCRIPTION_2;
-- other treatments
END IF;
END LOOP TEST;
close sys;
END;
我遇到了这个错误:
SQL0206N "SYS" is not valid in the context where it is used. LINE NUMBER=15.
SQLSTATE=42703
我用 Select 语句替换了光标,我的问题就解决了:
CREATE OR REPLACE PROCEDURE PROC_SAMPLE1()
BEGIN ATOMIC
DECLARE V_DESCRIPTION_1 VARCHAR(4000);
DECLARE V_DESCRIPTION_2 VARCHAR(4000);
FOR v_row AS select DESCRIPTION_1, DESCRIPTION_2 from DESC DO
-- other treatments
END FOR;
END;