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

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

product:
DB2 FOR LUW / DB2FORLUW / 980 - 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:                                              * 
* Users compiling PL/SQL routine containing a JDBC-style '?'   * 
**************************************************************** 
* PROBLEM DESCRIPTION:                                         * 
* JDBC-style '?' parameter markers not supported in PL/SQL     * 
* routines                                                     * 
**************************************************************** 
* RECOMMENDATION:                                              * 
* Upgrade to V9.8 FP3                                          * 
****************************************************************
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.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
Workaround
not known / see Local fix
Timestamps
Date  - problem reported    :
Date  - problem closed      :
Date  - last modified       :
24.02.2010
12.01.2011
12.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