DB2 - Problem description
Problem IC77463 | Status: Closed |
A QUERY REFERENCING A VIEW COLUMN THAT CONTAINS A CASE EXPRESSION MAY RETURN SQL30020N. | |
product: | |
DB2 FOR LUW / DB2FORLUW / 970 - DB2 | |
Problem description: | |
A query may return SQL30020N when all of the following criteria are satisfied: - the query is executed in DB2 version 9.7 Fixpack 4 - The database was created in VARCHAR2 compatibility mode (DB2_COMPATIBILITY_VECTOR=20) before Fixpack 4 - the query references a view column that contains a CASE expression - the view column resolves to a different nullability in Fixpack 4 when compared with what was stored in the catalog when the database was created (see the example below on how to determine the nullability change). This problem affects both user and system views. For system views, the following query may be used to check if a case expression is involved in the view. SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = <schema> AND VIEWNAME = <name> Example: Assuming that the database was created using VARCHAR2 compatibility mode (DB2_COMPATIBILITY_VECTOR=020) in DB2 Version 9.7 Fixpack 3, and the following query was executed in Fixpack 4. The query against a system view returns SQL30020N SELECT MODULENAME, DIALECT, REMARKS FROM SYSCAT.MODULES WHERE MODULESCHEMA='NEWTON'; SQL30020N Execution of the command or SQL statement failed because of a syntax error in the communication data stream that will affect the successful execution of subsequent commands and SQL statements: Reason Code "". SQLSTATE=58009 Check the view text of the system view for CASE expression: SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWSCHEMA = 'SYSCAT' AND VIEWNAME = 'MODULES'; create view syscat.modules (... dialect, ...) as select ... CAST (CASE WHEN moduletype = 'P' THEN 'PL/SQL' WHEN moduletype = 'A' THEN ' ' ELSE 'DB2 SQL PL' END AS VARCHAR(10)), ... from sysibm.sysmodules left outer join sysibm.syscomments r on moduleid = r.objectid and r.objecttype = 'm' Check the nullability of the DIALECT column in SYSCAT.MODULES when the database was created (what is stored in the catalog): DESCRIBE TABLE SYSCAT.MODULES; Data type Column Column name schema Data type Length Scale Nulls ------------ -------- ------------ ------ ----- ------ DIALECT SYSIBM VARCHAR 10 0 Yes <=== Create a dummy view in Fixpack 4 with the same view definition found above: CREATE VIEW DUMMYVIEW (....) AS (select .....); Check the nullability of the the DIALECT column in the DUMMYVIEW: DESCRIBE TABLE DUMMYVIEW; Data type Column Column name schema Data type Length Scale Nulls ------------ -------- ------------ ------ ----- ------ DIALECT SYSIBM VARCHAR 10 0 NO <=== | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * a query is executed in DB2 version 9.7 Fixpack 4 but * * database was created in VARCHAR2 compatibility mode before * * Fixpack 4 * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to DB2 Version 9.7 Fix Pack 5 or newer * **************************************************************** | |
Local Fix: | |
For a user view, drop and re-create the view | |
available fix packs: | |
DB2 Version 9.7 Fix Pack 5 for Linux, UNIX, and Windows | |
Solution | |
Problem was first fixed in Version 9.7 Fix Pack 5 | |
Workaround | |
See above Local Fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 12.07.2011 13.01.2012 13.01.2012 |
Problem solved at the following versions (IBM BugInfos) | |
9.7.FP5 | |
Problem solved according to the fixlist(s) of the following version(s) | |
9.7.0.5 |