Search code examples
db2db2-400db2-luw

How to display 2 select statement output through stored procedure in db2 under if condition


Based on OutPutType=1, I need to display 2 select statement output. In the below code I am getting following error: (Please note In actual I have 2 different dataset in 2 select statement but here for reference I have written one select for time and another statement used for date)

SQL Error [42601]: An unexpected token "" was found following "". Expected tokens may include: "OM sysibm.sysdummy1'".. SQLCODE=-104, SQLSTATE=42601, DRIVER=4.21.29

CREATE OR REPLACE
PROCEDURE Test.Test1 ( 
IN OutPutType SMALLINT)

DYNAMIC RESULT SETS 2 LANGUAGE SQL SPECIFIC test1
BEGIN
DECLARE v_cursor_text VARCHAR(5000);
DECLARE v_cursor_text1 VARCHAR(5000);

DECLARE C1 CURSOR WITH RETURN FOR Statement1;
DECLARE C2 CURSOR WITH RETURN FOR Statement2;

 IF OutPutType = 1 THEN

 SET
v_cursor_text = ' SELECT CURRENT_TIME   FROM sysibm.sysdummy1';
        
v_cursor_text1 = 'SELECT CURRENT_DATE   FROM sysibm.sysdummy1';
        
END IF;

 PREPARE Statement1
FROM
v_cursor_text;
 PREPARE Statement2
FROM
v_cursor_text1;

OPEN c1;
OPEN C2;
END

Solution

  • Your syntax error results from a missing SET verb before v_cursor_text1.

    To get the procedure to compile, your sample should read:

    --#SET TERMINATOR @
    CREATE OR REPLACE PROCEDURE Test.Test1 ( IN OutPutType SMALLINT)
    DYNAMIC RESULT SETS 2 
    LANGUAGE SQL SPECIFIC test1
    BEGIN
        DECLARE v_cursor_text VARCHAR(5000);
        DECLARE v_cursor_text1 VARCHAR(5000);
    
        DECLARE C1 CURSOR WITH RETURN FOR Statement1;
        DECLARE C2 CURSOR WITH RETURN FOR Statement2;
    
        IF OutPutType = 1 THEN
            SET v_cursor_text = ' SELECT CURRENT_TIME   FROM sysibm.sysdummy1';
            set v_cursor_text1 = 'SELECT CURRENT_DATE   FROM sysibm.sysdummy1';
        END IF;
    
        PREPARE Statement1 FROM v_cursor_text;
        PREPARE Statement2 FROM v_cursor_text1;
        OPEN c1;
        OPEN C2;
    END@