DB2 - Problem description
Problem IC72816 | Status: Closed |
TO_DATE SCALAR FUNCTION IN IF STATEMENT FAILS WITH SQL20448N | |
product: | |
DB2 FOR LUW / DB2FORLUW / 980 - DB2 | |
Problem description: | |
The TO_DATE function - or its synonym TIMESTAMP_FORMAT - may return SQL20448N when used within an IF or ELSE statement. The TO_DATE function is executed even though the condition is false. For example: IF option = 'TIMESTAMP' THEN SET result = TO_DATE( input, 'YYYY-MM-DD-HH24-MI-SS'); END IF; Regardless of the value of "option", the TO_DATE expression is evaluated using the value "input". This may not be noticed if the evaluation is successful, however, if "input" is not a valid timestamp SQL20448N is returned. If an error does not occur, the result is discarded, it is not assigned to "result". This only occurs in Compound SQL (inlined). | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * DB2 UDB Version 9.8 * **************************************************************** * PROBLEM DESCRIPTION: * * The TO_DATE function - or its synonym TIMESTAMP_FORMAT - may * * return SQL20448N when used within an IF or ELSE statement. * * The TO_DATE function is executed even though the condition * * is false. * * For example: * * * * IF option = 'TIMESTAMP' THEN * * SET result = TO_DATE( input, 'YYYY-MM-DD-HH24-MI-SS'); * * END IF; * * * * Regardless of the value of "option", the TO_DATE expression * * is evaluated using the value "input". This may not be * * noticed if the evaluation is successful, however, if "input" * * is not a valid timestamp SQL20448N is returned. If an error * * does not occur, the result is discarded, it is not assigned * * to "result". * * * * This only occurs in Compound SQL (inlined). * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 UDB next release. * **************************************************************** | |
Local Fix: | |
Ensure the TO_DATE function arguments are valid regardless of the condition. A simple way to do this with the example above is to use another variable that is initialized with a valid timestamp string: DECLARE to_date_input VARCHAR(14) DEFAULT '20081231233015'; ... IF option = 'TIMESTAMP' THEN SET to_date_input = input; SET result = TO_DATE( to_date_input, 'YYYY-MM-DD-HH24-MI-SS'); END IF; | |
available fix packs: | |
DB2 Version 9.8 Fix Pack 4 for AIX and Linux | |
Solution | |
Workaround | |
not known / see Local fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 25.11.2010 05.08.2011 05.08.2011 |
Problem solved at the following versions (IBM BugInfos) | |
Problem solved according to the fixlist(s) of the following version(s) | |
9.8.0.4 |