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 IC66110 Status: Closed

JDBC-style '?' parameter markers not supported in PL/SQL
routines

product:
DB2 FOR LUW / DB2FORLUW / 970 - DB2
Problem description:
If you compile a PL/SQL routine containing a JDBC-style '?' 
parameter marker, DB2 treats the appearance of the question mark 
as a syntax error, SQLCODE -104. 
 
For example, the following procedure dynamically prepares a 
PL/SQL anonymous block with an output parameter marker: 
 
create procedure test(out result varchar(10)) 
begin 
  declare stmt_text varchar(255); 
  declare S1 statement; 
 
  set stmt_text = 
    'declare test varchar(10); begin test := ''ABC''; ? := test; 
end;'; 
 
  prepare S1 from stmt_text; 
  execute S1 into result; 
end % 
 
call test(?) % 
SQL0104N  An unexpected token "?" was found following "declare 
test 
varchar(10); begin test := 'ABC'; ? := test; end;".  Expected 
tokens may 
include:  "SELE".  LINE NUMBER=1.  SQLSTATE=42601
Problem Summary:
**************************************************************** 
* USERS AFFECTED:                                              * 
* ALL                                                          * 
**************************************************************** 
* PROBLEM DESCRIPTION:                                         * 
* JDBC-style '?' parameter markers not supported in PL/SQL     * 
* routines                                                     * 
**************************************************************** 
* RECOMMENDATION:                                              * 
* Upgrade to V97FP2                                            * 
****************************************************************
Local Fix:
As a workaround, submit the dynamic statement in DB2 SQL PL, if 
possible, instead of PL/SQL.  This will allow the use of the '?' 
parameter marker. 
 
Using the error description example, you would change the value 
of STMT_TEXT to use an SQL PL compiled compound statement, like 
this: 
 
create procedure test(out result varchar(10)) 
begin 
  declare stmt_text varchar(255); 
  declare S1 statement; 
 
  set stmt_text = 
    'begin declare test varchar(10); set test = ''ABC''; set ? = 
test; end'; 
 
  prepare S1 from stmt_text; 
  execute S1 into result; 
end % 
 
call sysproc.set_routine_opts('') % 
 
call test(?) % 
 
Value of output parameters 
-------------------------- 
Parameter Name  : RESULT 
Parameter Value : ABC 
 
Return Status = 0
available fix packs:
DB2 Version 9.7 Fix Pack 2 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 3 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 3a for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 4 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 5 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 6 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 7 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 9a for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 8 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 9 for Linux, UNIX, and Windows
DB2 Version 9.7 Fix Pack 10 for Linux, UNIX, and Windows

Solution
Workaround
not known / see Local fix
BUG-Tracking
forerunner  : APAR is sysrouted TO one or more of the following: IC66641 
follow-up : 
Timestamps
Date  - problem reported    :
Date  - problem closed      :
Date  - last modified       :
05.02.2010
13.05.2010
13.05.2010
Problem solved at the following versions (IBM BugInfos)
9.7.FP2
Problem solved according to the fixlist(s) of the following version(s)
9.7.0.2 FixList