Search code examples
cursordb2

Using condition on Cursor, when it's Emty( NOT FOUND) in DB2


I want to make a condition on Cursor like in Oracle (IF cur%NOTFOUND THEN ..). I tried using this code in 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;

I got this error :

SQL0206N  "SYS" is not valid in the context where it is used.  LINE NUMBER=15.
SQLSTATE=42703

Solution

  • I replaced the cursor by a Select statement and my problem is solved :

    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;