PDA

View Full Version : SQL-Anweisung UPDATE auf CLOB-Spalte mit einer Zeichenfolge >32K



Seiten : [1] 2

Joshua
16-11-15, 09:33
Hallo SQL-Experten.
Mit der SQL-UPDATE-Anweisung soll ein CLOB-Feld mit einer XML-Zeichenfolge die etwa 86k groß ist, gefüllt werden. Die Anweisung wird über einen ODBC-Treiber an die AS/400 (V7R2) gesendet.

Die AS/400 verweigert die Ausführung, mit der Begründung, dass ein String maximal 32k groß sein kann. Die Ausführung auf der AS/400 mit dem Befehl RUNSQLSTM mit dem Befehl in einer IFS-Datei klappt auch nicht. Das Problem sollte daher eigentlich nicht der ODBC-Treiber sein.

Meine Frage: Wie bekomme ich die XML-Zeichenfolge in das CLOB-Feld, wenn ein WIN-Programm die Daten auf der AS/400 ablegen soll? Das Aufteilen in viele Einzel-Felder ist nicht gewünscht.

Danke für eure Unterstützung.

B.Hauser
16-11-15, 09:54
Mit dem SQL-Befehl GET_CLOB_FROM_FILE kannst Du eine IFS-Datei direkt in ein CLOB-Feld übertragen.


Insert Into YourTable
Values(Get_CLOB_From_File('/your/IFS/File.xml', 0));

Birgitta

Joshua
16-11-15, 10:01
Danke Birgitta,

doch wie kriege ich die IFS-Datei über den ODBC-Treiber auf die AS/400 oder kann die Datei auf einem Order im WIN bleiben?

BenderD
16-11-15, 10:21
wie wär's mit update mytable set myKLOPPfield = string1 concat string2 ?

D*B

B.Hauser
16-11-15, 10:50
Wenn die Datei im IFS steht ist sie doch schon auf der IBM i also kannst Du doch direkt mit GET_CLOB_FROM_FILE zugreifen. Oder sehe ich da irgendwas falsch?

Übrigens: ob Du eine IFS-Datei auf die AS/400 bekommst wage ich zu bezweifeln :)

Birgitta

Joshua
16-11-15, 11:00
Noch ist der XML-String in der WIN-Welt.
Also eine IFS-Freigabe auf einen IFS-Ordner einrichten und dem Ordner im WIN verbinden.
Dann sollte der UPDATE mit GET_CLOB_FROM_FILE funktionieren, wenn der XML-String hier abgelegt wird.

BenderD
16-11-15, 11:03
Übrigens: ob Du eine IFS-Datei auf die AS/400 bekommst wage ich zu bezweifeln :)
Birgitta

... ich habe da noch eine 150 stehen, da steht dick und fett AS/400 drauf und es ist keinerlei Problem da eine IFS Datei zu erzeugen, auch aus dem Netzwerk.

D*B

Joshua
16-11-15, 11:13
Ich werde sehen, was mein SW-Provider dazu sagt.

Fuerchau
16-11-15, 20:11
Das kannst du natürlich nicht in einen Command packen.
Aber als Parameter per CreateParameter und dem Typ adLongVarChar bzw. per Unicode mit adLongVarWChar. Als "Size" kannst du gerne 100MB angeben.
Dann sollte ein "Insert into myfile (CLOBName) values(?)" funktionieren.
Binär (BLOB) per adLongVarBinary müsste ebenso klappen.

Joshua
24-11-15, 08:49
Leider hat der SW-Provider Bedenken, dass in einer Multi-Thread-Umgebung andere Prozesse auf die IFS-Datei zugreifen bevor der SQL-UPDATE abgeschlossen ist. Habt Ihr dazu Anregungen?
Vielen Dank
Joshua