DB2 - Problem description
Problem IT17179 | Status: Closed |
IF ARRAY USED IN AN OPEN CURSOR IS MODIFIED THEN WRONG RESULT ORA TRAP ARE POSSIBLE | |
product: | |
DB2 FOR LUW / DB2FORLUW / B10 - DB2 | |
Problem description: | |
When ARRAY is used in an open cursor , but is modififed as we are fetching from this cursor, then wrong results or trap are possible. Example #1: V_TARGET_TABLE arrayType;-- V_TARGET_TABLE[1] := 'value1';-- CURSOR cur1 IS SELECT c1 FROM names WHERE c1 LIKE (V_TARGET_TABLE(INDEX));-- [..] OPEN cur1;-- V_TARGET_TABLE[1] := 'value2';-- FETCH cur1 into temp_vc;-- CLOSE cur1;-- Please, note that above we opened cursor when V_TARGET_TABLE[1] had one value, then we changed it to a new value, before we started the fetch from the cursor. Currently we do not support this and the fix will prevent above from running and will return an error (SQL0901N). Please, modify your application to make sure that array used in the cursor we are fetching from is not changed until we are done with the cursor and closed it. Example #2: Another example of unsupported usage that can produce a trap , but with the fix , it will return an SQL0901N: FOR COUNTER IN 1 .. V_E LOOP FOR CURSORX IN (SELECT COL1 FROM MY_TABLE WHERE COL2 LIKE '%[' || V_ARRAY(COUNTER) ||']%') LOOP V_ARRAY(V_ARRAY.LAST) := CURSORX.COL1;-- END LOOP;-- END LOOP;-- ... Trap Stack will be: sqloCrashOnCriticalMemoryValidationFailure sqlofmblkEx sqlriArrayDescriptor7destroy sqlricls_complex sqlrr_process_close_request sqlrr_close csmDriveClose csmClose pvmPackage11closeCursor Please, change your application to use local variable in the cursor: FOR COUNTER IN 1 .. V_E LOOP temp_value = V_ARRAY(COUNTER);-- FOR CURSORX IN (SELECT COL1 FROM MY_TABLE WHERE COL2 LIKE '%[' || temp_value ||']%') LOOP V_ARRAY(V_ARRAY.LAST) := CURSORX.COL1;-- END LOOP;-- END LOOP;-- This change will prevent both a trap and an SQL0901N. | |
Problem Summary: | |
**************************************************************** * USERS AFFECTED: * * All * **************************************************************** * PROBLEM DESCRIPTION: * * See Error Description * **************************************************************** * RECOMMENDATION: * * Upgrade to v11.1 m1fp1 * **************************************************************** | |
Local Fix: | |
Change the logic to avoid reusing updated array in the cursor as we are fetching. Please, see Description for examples. | |
available fix packs: | |
DB2 Version 11.1 Mod1 Fix Pack1 iFix001 for Linux, UNIX, and Windows | |
Solution | |
Workaround | |
not known / see Local fix | |
Timestamps | |
Date - problem reported : Date - problem closed : Date - last modified : | 22.09.2016 11.10.2017 11.10.2017 |
Problem solved at the following versions (IBM BugInfos) | |
Problem solved according to the fixlist(s) of the following version(s) | |
11.1.1.1 |