Neueste VersionenFixList
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
Haben Sie Probleme? - Kontaktieren Sie uns.
Kostenlos registrieren anmeldung-x26
Kontaktformular kontakt-x26

DB2 - Problembeschreibung

Problem IC66641 Status: Geschlossen

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

Produkt:
DB2 FOR LUW / DB2FORLUW / 980 - DB2
Problembeschreibung:
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-Zusammenfassung:
**************************************************************** 
* 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
verfügbare FixPacks:
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

Lösung
Workaround
keiner bekannt / siehe Local-Fix
Weitere Daten
Datum - Problem gemeldet    :
Datum - Problem geschlossen :
Datum - der letzten Änderung:
24.02.2010
12.01.2011
12.01.2011
Problem behoben ab folgender Versionen (IBM BugInfos)
9.8.FP3
Problem behoben lt. FixList in der Version
9.8.0.3 FixList