SQL-Code -245 bei UDF mit Parameter-Marker
- Dieses Thema hat 2 Antworten und 1 Teilnehmer, und wurde zuletzt aktualisiert vor 19 Jahre, 3 Monaten von
Anonym.
-
AuthorPosts
-
17. Juni 2004 um 12:55 Uhr #2404
AnonymGastHallo,
mit folgenden SQL sollen drei Werte per UDF an MQS übergeben werden. Um den Prepared Statement Cache zu nutzen, sollen die Werte nicht als Konstante sondern über Parameter-Marker übergeben werden.
Allerdings bekommt der Prepare einen SQL-Code -245.Hier nun das SQL:
String sqlstr = "SELECT DB2MQ2C.MQSEND(?,?,?) FROM SYSIBM.SYSDUMMY1";
CallableStatement ps = con.prepareCall(sqlstr);
ps.setString(1,"’B21.PTD.YG.1807.SERVICE’");
ps.setString(2,"’B21.PTD.POLICY’");
ps.setString(3,"’Schalke 04’");Übergibt man anstatt der Parameter-Marker die Konstanten läuft es problemlos.
Lt. SQL-Reference müßte die Übergabe von Parameter-Markern möglich sein. Kann jemand weiterhelfen?
Danke, Rolf
17. Juni 2004 um 16:56 Uhr #2887
AnonymInaktivwow, schon Version 8 im Einsatz. 😮
Das Problem liegt nur indirekt an den Parameter-Markern… sondern DB2 kennt mehrere Funktionen namens DB2MQ2C.MQSEND
z.B. eine DB2MQ2C.MQSEND ( CHAR(),CHAR(),CHAR() ) und eine
DB2MQ2C.MQSEND ( VARCHAR(),VARCHAR(),VARCHAR() )
usw.
gibst Du nun Konstanten an, kann DB2 die Function-Resolution durchführen und die richtige Funktion auswählen, aber bei
DB2MQ2C.MQSEND ( ? , ? , ? ) weiss DB2 nicht, welche Funktion es verwenden soll. Dadurch kommt es zum SQLCODE = -245.Leider kann ich im Moment keine Lösung für dieses Problem anbieten 🙁
wenn mir was dazu einfällt , poste ich es hier.
Vielleicht funktioniert sogar ein
DB2MQ2C.MQSEND ( CAST ( ? AS CHAR(xx)) , CAST ( ? AS CHAR(xx)), CAST ( ? AS CHAR(xx) ) ) ; ???
18. Juni 2004 um 6:28 Uhr #3240
AnonymGastHallo Ulrich,
V8 ist zwar im Einsatz, aber nicht auf diesem System… (hoffe, die Systemer haben nicht die falsche Steplib versorgt). Allerdings hat mich auch gewundert, das der -245 nicht in dem V7 Messages and Codes beschrieben ist.
Hatte so etwas auch schon vermutet und es deshalb mal mit VARCHAR (?) probiert, liefert aber einen -418 (invalid use of parameter-marker).Mit der cast-function klappts aber!
Super Idee, vielen Dank! Rolf
-
AuthorPosts
You must be logged in to reply to this topic.