简体   繁体   中英

how to update multiple column using update and case statement in db2

I want to update two column using case statement please suggest to me how to achieve this.

I have tried below piece of code but which giving syntax error:

UPDATE SASDB.TEMP_VALIDATE_FIN_ENTRIES 
            (CASE  WHEN  (LENGTH(TRIM(ACCOUNT_ID)) = 16 
                        AND NVL(LENGTH(TRIM(TRANSLATE(UPPER(ACCOUNT_ID),'0123456789',' '))),0)=0
                        AND  LENGTH(TRIM(SOL_ID)) = 4
                        AND NVL(LENGTH(TRIM(TRANSLATE(UPPER(SOL_ID),'0123456789',' '))),0)=0
                        AND NVL(LENGTH(TRIM(TRANSLATE(UPPER(DEBIT_TRANS_AMT),'0123456789,.',' '))),0)=0
                        AND NVL(LENGTH(TRIM(TRANSLATE(UPPER(CREDIT_TRANS_AMT),'0123456789,.',' '))),0)=0) 
                            THEN
                                            SET VALIDATION_REMARKS='ACCOUNTS ARE VALIDATED SUCCESSFULLY'
                                            SET VALIDATION_STATUS='YES'
                WHEN (LENGTH(TRIM(ACCOUNT_ID)) <> 16)      
                                THEN 
                                                SET VALIDATION_REMARKS='ACCOUNT_ID SHOULD BE LENGTH  16'
                                                SET VALIDATION_STATUS='NO'
                WHEN LENGTH(TRIM(SOL_ID)) <> 4
                                THEN 
                                                SET VALIDATION_REMARKS='SOL_ID HAS NOT LENGTH  4'
                                                SET VALIDATION_STATUS='NO'
                WHEN NVL(LENGTH(TRIM(TRANSLATE(UPPER(SOL_ID),'0123456789',' '))),0)>0
                                THEN 
                                            SET VALIDATION_REMARKS='SOL_ID HAS ALPHABET OR SPECAIL CHARACTER'
                                            SET VALIDATION_STATUS='NO'
                WHEN NVL(LENGTH(TRIM(TRANSLATE(UPPER(ACCOUNT_ID),'0123456789',' '))),0)>0                           
                                    THEN 
                                        SET VALIDATION_REMARKS='ACCOUNT_ID HAS ALPHABET OR SPECAIL CHARACTER'
                                            SET VALIDATION_STATUS='NO'
                WHEN NVL(LENGTH(TRIM(TRANSLATE(UPPER(CREDIT_TRANS_AMT),'0123456789,.',' '))),0)>0
                                    THEN 
                                        SET VALIDATION_REMARKS='CREDIT TRANASTION AMOUNT HAS SPECIAL CHARACTER'
                                            SET VALIDATION_STATUS='NO'
                WHEN   NVL(LENGTH(TRIM(TRANSLATE(UPPER(DEBIT_TRANS_AMT),'0123456789,.',' '))),0)>0
                                    THEN 
                                    SET VALIDATION_REMARKS='DEBIT TRANASTION AMOUNT HAS SPECIAL CHARACTER'
                                        SET VALIDATION_STATUS='NO'
                WHEN ACCOUNT_EXIT_FLAG IS NULL 
                                    THEN SET VALIDATION_REMARKS='ACCOUNT DOESNOT EXIST IN DATABASE'
                                        SET ACCOUNT_EXIT_FLAG=NVL(ACCOUNT_EXIT_FLAG,'NO')
                END);

The above code is failing with syntax error please let me know how to resolve those error.

You'll have to change your structure around.

UPDATE SASDB.TEMP_VALIDATE_FIN_ENTRIES SET
VALIDATION_REMARKS = CASE WHEN @columnname THEN ELSE END,
VALIDATION_STATUS = CASE WHEN @columnname THEN ELSE END

try this simplified solution :

UPDATE SASDB.TEMP_VALIDATE_FIN_ENTRIES 
set (VALIDATION_REMARKS, VALIDATION_STATUS)=
(

CASE  
WHEN  LENGTH(TRIM(NVL(ACCOUNT_ID, '0')) = 16 AND TRIM(TRANSLATE(NVL(ACCOUNT_ID, '0'),'0123456789',' '))=''
    AND LENGTH(TRIM(NVL(SOL_ID, '0'))) = 4 AND TRIM(TRANSLATE(NVL(SOL_ID, '0'),'0123456789',' '))=''
    AND TRIM(TRANSLATE(NVL(DEBIT_TRANS_AMT, '0'),'0123456789,.',' '))=''
    AND TRIM(TRANSLATE(NVL(CREDIT_TRANS_AMT, '0'),'0123456789,.',' '))='' THEN 'ACCOUNTS ARE VALIDATED SUCCESSFULLY'
WHEN LENGTH(TRIM(NVL(ACCOUNT_ID, '0'))) <> 16 THEN 'ACCOUNT_ID SHOULD BE LENGTH  16'
WHEN LENGTH(TRIM(NVL(SOL_ID, '0'))) <> 4        THEN 'SOL_ID HAS NOT LENGTH  4'
WHEN TRIM(TRANSLATE(NVL(SOL_ID, '0'),'0123456789',' '))<>'' THEN 'SOL_ID HAS ALPHABET OR SPECAIL CHARACTER'
WHEN TRIM(TRANSLATE(NVL(ACCOUNT_ID, '0'),'0123456789',' '))<>'' THEN 'ACCOUNT_ID HAS ALPHABET OR SPECAIL CHARACTER'
WHEN TRIM(TRANSLATE(NVL(CREDIT_TRANS_AMT, '0'),'0123456789,.',' '))<>'' THEN 'CREDIT TRANASTION AMOUNT HAS SPECIAL CHARACTER'
WHEN TRIM(TRANSLATE(NVL(DEBIT_TRANS_AMT, '0'),'0123456789,.',' '))<>'' THEN 'DEBIT TRANASTION AMOUNT HAS SPECIAL CHARACTER'
WHEN ACCOUNT_EXIT_FLAG IS NULL THEN 'ACCOUNT DOESNOT EXIST IN DATABASE'
ELSE 'CASE NOT TRAITED' 
END,

CASE  
WHEN  LENGTH(TRIM(NVL(ACCOUNT_ID, '0')) = 16 AND TRIM(TRANSLATE(NVL(ACCOUNT_ID, '0'),'0123456789',' '))=''
    AND LENGTH(TRIM(NVL(SOL_ID, '0'))) = 4 AND TRIM(TRANSLATE(NVL(SOL_ID, '0'),'0123456789',' '))=''
    AND TRIM(TRANSLATE(NVL(DEBIT_TRANS_AMT, '0'),'0123456789,.',' '))=''
    AND TRIM(TRANSLATE(NVL(CREDIT_TRANS_AMT, '0'),'0123456789,.',' '))='' THEN 'YES'
WHEN 
LENGTH(TRIM(NVL(ACCOUNT_ID, '0'))) <> 16 OR 
LENGTH(TRIM(NVL(SOL_ID, '0'))) <> 4 OR
TRIM(TRANSLATE(NVL(SOL_ID, '0'),'0123456789',' '))<>'' OR
TRIM(TRANSLATE(NVL(ACCOUNT_ID, '0'),'0123456789',' '))<>'' OR
TRIM(TRANSLATE(NVL(CREDIT_TRANS_AMT, '0'),'0123456789,.',' '))<>'' OR
TRIM(TRANSLATE(NVL(DEBIT_TRANS_AMT, '0'),'0123456789,.',' '))<>'' OR
ACCOUNT_EXIT_FLAG IS NULL THEN 'NO' THEN 'NO'
ELSE 'CASE NOT TRAITED' 
END

)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM