Anmelden

View Full Version : SQL XML



Seiten : [1] 2 3

mk
09-01-15, 13:13
Hallo zusammen,

ich möchte mit SQL XML Daten erzeugen und diese
als XML auf dem IFS ablegen.

Folgendes SQL zeigt die Daten OpsNav

SELECT
XMLSERIALIZE(
XMLELEMENT ( NAME "kunde", XMLATTRIBUTES( k.kdnnr as "Kundennr") ,
XMLFOREST ( trim(k.kdnam) as "NAME" ,
trim(k.kdort) as "Ort",
trim(k.kdplz) as "PLZ"
) )

AS CLOB(1M) INCLUDING
XMLDECLARATION) AS XML_Kunden_Daten

FROM kdstap as k;

Weiß jemand wie ich daraus eine lesbare IFS Datei erzeugen kann ?
Die XML Daten sollen später an eine andere Applikation übergeben werden.

Gruß
Michael

Robi
09-01-15, 13:36
wir schreiben mit SQL so:

C/EXEC SQL SET OPTION COMMIT=*NONE, DATFMT=*ISO, TIMFMT=*ISO,
C+ NAMING=*SYS, CLOSQLCSR=*ENDACTGRP
C/END-EXEC
/FREE
CLEAR MYXMLDOC;
MYXMLDOC_NAME = '/HOME/RJ/MYXMLDOC.XML';
MYXMLDOC_NL = %LEN(%TRIM(MYXMLDOC_NAME));
MYXMLDOC_FO = SQFOVR; //REPLACE IF EXISTS

EXEC SQL
SELECT XMLDOCUMENT
(XMLGROUP(ADR006 AS "D_C",
ADR007 AS "NUMMER",
ADR009 AS "INTERN-NAME",
ADR018 AS "STREET",
ADR015 AS "ZIPCODE",
ADR020 AS "CITY"
ORDER BY ADR015 DESC, ADR009
OPTION ROW "KUNDEN"
ROOT "ADRESSEN"))
INTO :MYXMLDOC
FROM ADRM1;

*INLR = *ON;
/END-FREE

vielleicht hilft dir das ja

Robi

Fuerchau
09-01-15, 15:35
Wo und wie ist denn MYXMLDOC definiert und wie passiert dann der Export ins IFS?

Robi
09-01-15, 15:51
Guten morgen Baldur!

Wo und wie ist denn MYXMLDOC definiert
MYXMLDOC_NAME = '/HOME/RJ/MYXMLDOC.XML';

und wie passiert dann der Export ins IFS?
MYXMLDOC_NAME = '/HOME/RJ/MYXMLDOC.XML';

Den Rest macht OS/400!

Das Pgm ist recht klein, schreib es ab, es funktioniert!

Robi

Robi
09-01-15, 16:04
Wir machen das nur für einfache xml
Warscheinlich sind auch etwas komplexere Strukturen möglich, aber da fehlt uns die Übersicht.
Daher machen wir dann die hier (http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/19506-Erstellen-eines-XML-Dokumentes-aus-COBOL) angerissene Methode.
Robi

Fuerchau
09-01-15, 16:13
Tut mir Leid, der SQL-Precompiler meldet:
MYXMLDOC nicht definiert oder nicht verwendbar.

Mir ist auch unbekannt, dass Variablen neuerdings nicht definiert werden müssen.
Vielleicht werden wir beider ja schlauer, wenn man mal das Compiler-Listing sieht.

Robi
09-01-15, 16:26
Ok, sorry,
hab meins grade noch mal gewandelt.
0 fehler
es ist o.g. source als sqlrpgle, mit 14 für v7r1 gewandelt (geht auch früher, k.a. welches release wir damals hatten)

Generierungsbewertungsstufe . . : 10
Standardaktivierungsgruppe . . . : *YES
Umwandlungsprogrammauswahlmögl. : *XREF *GEN *NOSECLVL *SHOWCPY
*EXPDDS *EXT *NOSHOWSKP *NOSRCSTMT
*DEBUGIO *UNREF *NOEVENTF
Testhilfesichten . . . . . . . . : *ALL

der precompler meldet quasi nur die source nochmal,

Habe aber (seit einem SQL Fehler, auf Empfehlung von Andreaspr@aon.at) rpgppopt *LVL2
im cmddft

versuch das mal
Robi

Fuerchau
09-01-15, 16:38
Dies macht keinen Unterschied, da ja keine Copies vorhanden sind.
Der Fehler ist derselbe.

Ich habe mir alle Beispiele im SQL-Programmierhandbuch V7R1 angesehen, mit IFS-Ausgabe ist da nichts und beim "Select .. into " muss eine Hostvariable angegeben werden.

Also irgendwo wird da bei euch was gezaubert.

Robi
09-01-15, 16:43
Zaubern kann ich (leider) nicht!
Was soll ich machen?
Montag mal ne PC-Visit Sitzung? (meine Kiste fährt grade runter)
Ich kann dir das gerne zeigen.
Und da ich auf die schnelle mit 14 gewandelt habe, greift auch nicht unsere recht komplexe UW-Automatik
schönes WE
Montag?
Gruß
Robi

Fuerchau
09-01-15, 16:48
Ich denke, da fehlen ein paar OS-Optionen bei der Installation des OS/400, ich werde mal nachfragen ob die noch installiert werden können.