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 |
|