Dynamic SQL in DB2 procedure

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • BitulYadav
    New Member
    • Jun 2008
    • 1

    Dynamic SQL in DB2 procedure

    Hi

    i am getting the wrong result from the following code:
    CREATE PROCEDURE DYNAMIC_QUERY ( )
    DYNAMIC RESULT SETS 1
    ------------------------------------------------------------------------
    -- SQL Stored Procedure
    ------------------------------------------------------------------------
    P1: BEGIN
    DECLARE V_STR VARCHAR(2000);
    DECLARE V_TXN_CDE VARCHAR(4);

    SET V_STR='';

    FOR V_CUR AS C1 CURSOR WITH HOLD FOR SELECT TXN_PFE_TXN_CDE FROM D_REF_TXN_CDE WHERE TXN_TYP_CDE='CS H'
    DO
    SET V_STR=V_STR||'' ''||V_CUR.TXN_P FE_TXN_CDE||''' '||',';
    END FOR;

    SET V_STR=SUBSTR(V_ STR, 1, LENGTH(V_STR)-1);
    IF V_TXN_CDE IN (V_STR)
    THEN
    INSERT INTO TEST4 VALUES (3,'CASH TRANSACTION');
    ELSE
    INSERT INTO TEST4 VALUES (3,'NOT CASH TRANSACTION');
    END IF;
    COMMIT;
    END P1
    IF V_TXN_CDE IN (V_STR) IS GIVING WRONG RESULT

    BUT WHEN I CHECK THE VALUE OF V_STR IT IS :
    '2200','2201',' 2202','2203','2 204','2205','22 06','2207','220 8','2209','2210 ','2211','2212' ,'2213','2214', '2215','2216',' 2260','2261','2 270','2271','33 60','3361','337 0','3371','4200 ','4300','4201' ,'4258'

    ------------------------------------
    NOW WHEN I RUN THE SAME CODE BY REPLACING V_STR I GET THE CORRECT RESULT

    CREATE PROCEDURE DYNAMIC_QUERY ( )
    DYNAMIC RESULT SETS 1
    ------------------------------------------------------------------------
    -- SQL Stored Procedure
    ------------------------------------------------------------------------
    P1: BEGIN
    DECLARE V_STR VARCHAR(2000);
    DECLARE V_TXN_CDE VARCHAR(4);

    SET V_STR='';

    FOR V_CUR AS C1 CURSOR WITH HOLD FOR SELECT TXN_PFE_TXN_CDE FROM D_REF_TXN_CDE WHERE TXN_TYP_CDE='CS H'
    DO
    SET V_STR=V_STR||'' ''||V_CUR.TXN_P FE_TXN_CDE||''' '||',';
    END FOR;

    SET V_STR=SUBSTR(V_ STR, 1, LENGTH(V_STR)-1);
    IF V_TXN_CDE IN ('2200','2201', '2202','2203',' 2204','2205','2 206','2207','22 08','2209','221 0','2211','2212 ','2213','2214' ,'2215','2216', '2260','2261',' 2270','2271','3 360','3361','33 70','3371','420 0','4300','4201 ','4258')
    THEN
    INSERT INTO TEST4 VALUES (3,'CASH TRANSACTION');
    ELSE
    INSERT INTO TEST4 VALUES (3,'NOT CASH TRANSACTION');
    END IF;
    COMMIT;
    END P1

    How to overcome this problem?

    Regards
    Bitul
Working...