Anmelden

View Full Version : Ablage einer .XML Datei im IFS mit Hilfe eine SQL Skriptes



derMuller
09-04-18, 10:35
Hallo Zusammen,

ich möchte mit Hilfe eines SQL Skripts eine .XML Datei im IFS erzeugen/ablegen.
Leider komme ich aktuell nicht weiter :(.

Im Programm erstelle ich die Datei mit folgendem eingebetteten SQL Befehl:
- exec sql select xmlDocument(data) into :xmlFile from qtemp.newXml;

Die Variable 'xmlFile' ist im RPG wiederum als SqlType(XML_CLOB_File) definiert und ist im Prinzip eine Datenstruktur die 4 versch. Felder enthält:
- XMLFILE_NL - XMLFILE_DL
- XMLFILE_FO
- XMLFILE_NAME

Das funktioniert soweit alles super. Leider weiß ich nicht, wie ich diese Definition im SQL Skript umsetzen kann. Das sieht aktuell wie folgt aus:

begin;

declare xmlFile ??? (Hier fehlt nun die korrekte Definition)

select xmlDocument(data) into xmlFile from qtemp.newXml;

end;


Kann mir vielleicht jemand weiterhelfen?

Danke im Vorraus!

Gruß
derMuller

B.Hauser
09-04-18, 10:53
Mit reinem SQL geht das nicht.
Du kannst Dir eine RPG-Prozedur basteln, die das XML ermittelt und dann ins IFS schreibt.
Die Prozedur kannst Du dann Stored Procedure registrieren und aus SQL aufrufen.

Alternativ kannst Du auch die Funktionen und Prozeduren, die ich vor einiger Zeit als OPEN-Source bereitgestellt habe verwenden:
Write to IFS with SQL (https://github.com/BirgittaHauser/Write-to-IFS-with-SQL)

Birgitta

derMuller
09-04-18, 10:57
Hallo Birgitta,

danke für deine Antwort.
Werde mir mal deine Funktionen anschauen :).

Gruß
derMuller

AG1965_2
10-04-18, 13:10
Das ist kein "Skript", sondern "embedded SQL" und da bilde ich mir aber ein, dass es sehr wohl gehen muss und kurzes Googlen fand diesen Beitrag, und das sieht in der Tat so aus, als ob das ginge.
https://stackoverflow.com/questions/35777551/save-xml-generated-using-db2-for-i-into-ascii-file
Lass' uns bitte wissen, ob das hinhaut.

derMuller
10-04-18, 13:22
Bitte richtig lesen!
Mit "embedded SQL" funktioniert es (s. o.).
Im SQL Skript jedoch nicht!

AG1965_2
10-04-18, 13:25
Hatte ich ja, allerdings geriet ich offenbar gleich 2mal auf Abwege. :-)
Beim dritten Mal habe ich dann geschnallt, dass es im embedded geht und Du das tatsächlich in ein Skript tun willst. :-)
DANKE!