PDA

View Full Version : Embedded SQL - Typenproblem



harkne
11-02-20, 10:24
Hallo zusammen,

ich führe nachfolgendes SQL aus, welches mir die offenen Meldungen in der QSYSOPR zurück geben soll

SELECT From_Job, Message_Key, Message_Timestamp FROM
qsys2.message_queue_info t1 WHERE t1.message_queue_name = 'QSYSOPR'
and t1.message_type = 'INQUIRY' and not exists (select * from
qsys2.message_queue_info as t2 where t2.message_queue_name =
'QSYSOPR' and t2.associated_message_key = t1.message_key );

Message_key ist varbinary(4)

Mein FETCH sieht wie folgt aus:

c/exec sql
c+ fetch next from c_msg into
c+ :Sql_Job :w@NullJob,
c+ :Sql_MsgKey :w@NullMsgKey,
c+ :Sql_MsgTS :w@NullMsgTS
c/end-exec


Wie muss ich die Variable Sql_MsgKey im RPG definieren damit beim FETCH nicht der Fehler "Variable SQL_MSGKEY nicht kompatibel oder Wert zu lang." kommt ?

Viele Grüße Harald

ILEMax
11-02-20, 11:04
das kannst du doch in der Umwandlungsliste für Message_key sehen!?

Fuerchau
11-02-20, 11:21
dcl-s Sql_MsgKey varchar(4) ccsid(*hex);

D Sql_MsgKey 4 varying ccsid(*hex)

Wobei der MsgKey ja eigentlich nicht varying ist sondern immer 4-bytes Hex.

harkne
11-02-20, 13:42
Das mit der Umwandlungsliste weiß ich nicht.
Ich glaube er nimmt als Definition die Definition des Ergebnisfeldes wie dieses definiert ist.
In meiner Umwandlungsliste ist die Defnition wie folgt
D SQL_00013 157 166A CCSID(*JOBRUNMIX) SQL_MSGKEY

Weiter unten im Programm

SQL_MSGKEY = SQL_00013;

Die Definition zeigt 10A, so habe ich SQL_MSGKEY definiert, also nicht wirklich die Länge aus dem View

Ich probier das mal von Herrn Fuerchau. Im Moment habe ich es mit char(Message_Key) gelöst. Ich kann es dann zwar nicht lesen, ist aber nicht so schlimm, da der Zugriff über char(Messag_Key) trotzdem erfolgreich ist.

Vielen Dank an alle

Fuerchau
11-02-20, 17:24
Der Message-Key ist letztlich ein 4-byte Integer-Wert, der allerdings auch in den API's bereits immer 4-Byte CHAR war (z.B. RCVMSG-Befehl).
Wichtig ist eben, dass für den Wert keine Codewandlung durchgeführt wird, was bei einer Umwandlungsfunktion Char() durchaus passieren könnte.