home clear 64x64
en blue 200x116 de orange 200x116 info letter User
suche 36x36
Latest versionsfixlist
11.1.0.7 FixList
10.5.0.9 FixList
10.1.0.6 FixList
9.8.0.5 FixList
9.7.0.11 FixList
9.5.0.10 FixList
9.1.0.12 FixList
Have problems? - contact us.
Register for free anmeldung-x26
Contact form kontakt-x26

DB2 - Problem description

Problem IC67895 Status: Closed

SQL0502N(CURSOR ALREADY OPEN) WHEN TWO FOR LOOPS USE THE SAME CURSOR IN
THE SAME PL/SQL ROUTINE

product:
DB2 FOR LUW / DB2FORLUW / 980 - DB2
Problem description:
If your PL/SQL routine contains two or more FOR loops that use 
the same cursor name, error SQL0502N may be reported by DB2 when 
the second FOR loop is executed.  For example: 
 
set sqlcompat plsql; 
set serveroutput on; 
 
create table test1(col1 varchar2(10)); 
insert into test1 values 'AAA', 'BBB', 'CCC'; 
 
create or replace procedure test 
is 
  cursor C1 is select COL1 from TEST1; 
begin 
  for rec in C1 
  loop 
    dbms_output.put_line(rec.col1); 
  end loop; 
 
  for rec in C1 
  loop 
    dbms_output.put_line(rec.col1); 
  end loop; 
end; 
/ 
 
begin 
  test; 
end; 
/ 
 
DB21034E  The command was processed as an SQL statement because 
it was not a valid Command Line Processor command. 
During SQL processing it returned: 
SQL0502N  The cursor specified in an OPEN statement is already 
open. SQLSTATE=24502
Problem Summary:
**************************************************************** 
* USERS AFFECTED:                                              * 
* ALL                                                          * 
**************************************************************** 
* PROBLEM DESCRIPTION:                                         * 
* If your PL/SQL routine contains two or more FOR loops        * 
* thatusethe same cursor name, error SQL0502N may be           * 
* reportedby DB2 when the second FOR loop is executed.SQL0502N * 
*  The cursor specified in an OPEN statement isalready open.   * 
* SQLSTATE=24502                                               * 
**************************************************************** 
* RECOMMENDATION:                                              * 
* Upgrade to version 9.8 fixpack 3.                            * 
****************************************************************
Local Fix:
As a workaround, you may use the SELECT form of the FOR loop: 
create or replace procedure test 
is 
begin 
  for rec in (select COL1 from TEST1) 
  loop 
    dbms_output.put_line(rec.col1); 
  end loop; 
 
 
 
 
  for rec in (select COL1 from TEST1) 
  loop 
    dbms_output.put_line(rec.col1); 
  end loop; 
end; 
/ 
 
begin 
  test; 
end; 
/ 
 
DB20000I  The SQL command completed successfully. 
 
AAA 
BBB 
CCC 
AAA 
BBB 
CCC
available fix packs:
DB2 Version 9.8 Fix Pack 3 for Linux, UNIX, and Windows
DB2 Version 9.8 Fix Pack 4 for AIX and Linux
DB2 Version 9.8 Fix Pack 5 for AIX and Linux

Solution
This was first fixed in V98 FP3
Workaround
not known / see Local fix
Timestamps
Date  - problem reported    :
Date  - problem closed      :
Date  - last modified       :
14.04.2010
10.01.2011
10.01.2011
Problem solved at the following versions (IBM BugInfos)
9.8.FP3
Problem solved according to the fixlist(s) of the following version(s)
9.8.0.3 FixList