PDA

View Full Version : CLOB in txt Datei schreiben



Domeus
11-06-21, 12:14
Hallo.

Ich habe in einem RPG Programm eine CLOB Variable "sXML". Diese enthält Daten einer XML Datei. Diesen Inhalt möchte ich nun in eine xml.txt Datei im IFS (zB /tmp/xml.txt) schreiben. cpytoimpf funktioniert nicht weil ich es nicht schaffe eine Datei zu erstellen in die die Daten passen. Ich kann zwar eine SQL Datei mit einem CLOB Feld erstellen aber weder mit INSERT noch mit UPDATE bekomme ich die Daten aus der sXML in die Datei. Da steht nachher nur *POINTER drin oder ich bekomme Fehler beim Compilieren.

Wie könnte ich denn das bewerkstelligen?

Danke und Gruß
Domeus

Andreas_Prouza
11-06-21, 12:49
Hallo Domeus,

Probiere es mit dem SQL Datentyp CLOB_FILE:


DCL-S l_CLOBFile SQLType(CLOB_File);

l_CLOBFile_Name = '/tmp/xml.txt';
l_CLOBFile_NL = %Len(%Trim(l_CLOBFile_Name));
l_CLOBFile_FO = SQFOVR;


Exec SQL Set :l_CLOBFile = :deine_RPG_CLOB_Variable;

Im übrigen ist das mit dem *POINTER schon richtig so.
Wenn du den CLOB Datentyp im STRSQL ausgibst, kann er das nicht darstellen.
Dafür verwendest du am besten den ACS oder einen anderen DB Client.
Dann wird der Inhalt korrekt dargestellt.

lg Andreas

prsbrc
14-06-21, 06:47
:-) nur damit ich auch mal einen Klugschei*er rauslassen kann.
Mittels STRSQL kann man sich sehr wohl die Daten anzeigen lassen.
Man muss sich diese nur selber Casten dann läuft es.
SELECT CAST(feld AS CHAR(2000)) FROM lib.table

Domeus
14-06-21, 07:22
Super vielen Dank für die Antworten. Ihr habt mir sehr geholfen.

Gruß
Sebastian

Fuerchau
14-06-21, 08:00
Beim Cast muss man allerdings noch vorher einen Substring machen, damit die Ergebnissatzlänge 32K nicht übersteigt. Das hättet du als Klugschei*er aber auch wissen können;-).

PS:
Welche Genderform ist "Klugschei*er"?

B.Hauser
14-06-21, 08:33
Beim Cast muss man allerdings noch vorher einen Substring machen, damit die Ergebnissatzlänge 32K nicht übersteigt. Das hättet du als Klugschei*er aber auch wissen können;-).

PS:
Welche Genderform ist "Klugschei*er"?

Muss er nicht!
Durch die Angabe der Länge des CHAR-Feldes im CAST, erfolgt automatisch ein SUBSTR.
Wird abeschnitten wird lediglich eine Warnung mit SQLSTATUS 01004 ausgegeben.
Die maximale Länge eines alphanumerischen Feldes (32767 Byte) darf natürlich beim CAST nicht überschritten werden.
Soweit zur Klugschei*erei!

Andreas_Prouza
14-06-21, 08:34
Danke für die Ergänzung. Ihr habt natürlich alle Recht! :-))

Fuerchau
14-06-21, 10:42
Stimmt, habe ich glatt überlesen.