View Full Version : XML in PF übertragen (Variablenproblem)
Update: musste im SQL noch auf *CHG umstellen.
Jetzt führt er da alles korrekt aus (auch mit decimal.
Bloß mein Programm liefert immer noch bloß eine leere Zeile, sobald ich
Balance mit rein nehme.
Und was sagt das berühmte Joblog?
Übrigens %DEC() verträgt nur ungern Leerzeichen. Der Feldtyp VARCHAR oder die Funktion %trim() wäre hier noch angebracht.
ok dankeschön!
Anzeigervariable erforderlich
Bin dabei jetzt auf: http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/549-SQL-Error gestoßen.
Jetzt muss ich nur noch rausfinden, wo die hingehört
Beim Fetch benötigst du je Variable einen NULL-Anzeiger von Typ "5I 0":
exec SQL fetch : F1 : F1Null, : F2 : F2Null, ...;
Null-Anzeiger:
0 = OK
-1 = NULL
>0 = Warnung, Inhalt gekürzt
Ja tausend Dank!
Hast mich gut durchgeführt :D
funktioniert jetzt einwandfrei:
//-----------------------------------------------------------------------
// Prozedur XML speichern
//-----------------------------------------------------------------------
P xmltosql B
D PI
D file_name S 900A
D anz1 S 5I 0
D anz2 S 5I 0
D anz3 S 5I 0
/free
exec sql set option commit=*CHG;
exec sql declare c2 cursor for
select info_req.*
from xmltable('/ExCustomerDataList/Customer'
passing xmlparse(document get_xml_file('/home/codaho/test.xml'))
columns
RIONID varchar(20) path 'CustomerNo',
RIANZA varchar(5) path 'NoOfSuccessfullOrders',
RIAUFO decimal(11, 2) path 'Balance'
) info_req;
exec sql open C2;
dou (sqlcode <> *zeros) and sqlcode <> 326;
exec sql fetch c2 into :rionid :anz1, :rianza :anz2, :riaufo :anz3;
write risk00r;
enddo;
/end-free
P E
Mich würde da schon interessieren, was denn die NULL-Anzeiger mal anderes als 0 anzeigen!
Ja, da bau ich jetzt gerade dran.
Dachte mir das wie folgt:
Wenn sie nicht 0 anzeigen, wird bei der ID der Satz übersprungen,
bei den anderen Werten werden diese jeweils mit 0 gefüllt.
Zudem wird immer ein Protokollsatz erstellt, der die Werte der Felder + Null-Anzeiger Werte enthält.
Indikator-Variablen bringen 0 zurück wenn kein NULL-Wert vorliegt und auch sonst alles in Ordnung ist.
-1 wird bei NULL-Wert ausgegeben, -2 ist Data-Mapping-Error.
NULL-Werte kann man übrigens auch umgehen (falls das gewünscht ist), in dem man im XMLTABLE einen Default-Wert angibt.
... FeldName DataTypeDefinition Default='WasAuchImmer' Path='' ...
Birgitta
Dankeschön für die Tipps!
Ist es auch möglich tiefer verschachtelte XMLs in eine PF zu schreiben?
Also dass ich in Customer noch Customer1 habe und er mir die Werter zu jedem Customer Satz hinzufügt?
<Customer>
<CustomerNo>1000000315</CustomerNo>
<NoOfSuccessfullOrders>2</NoOfSuccessfullOrders>
<Currency>EUR</Currency>
<Balance>-10.85</Balance>
<Collection>0</Collection>
<ReturnQuote>33</ReturnQuote>
<ReturnQuoteAmount>10</ReturnQuoteAmount>
<Customer1>
<Nummer>1</Nummer>
</Customer1>
</Customer>
1
select info_req.*
from xmltable('/ExCustomerDataList/Customer'
passing xmlparse(document get_xml_file('/home/codaho/test.xml'))
columns
RIONID varchar(20) path 'CustomerNo',
RIANZA varchar(5) path 'NoOfSuccessfullOrders',
RIAUFO decimal(11, 2) path 'Balance',
RIAUFU decimal(11, 2) path 'BalanceOverdueOpenAssets',
RIMAHN varchar(2) path 'MaxActReminderLevel',
RIIKSA varchar(1) path 'Collection',
RIRQST decimal(5, 2) path 'ReturnQuote',
RIRQZS decimal(5, 2) path 'ReturnQuoteOverTime',
RIRQWT decimal(5, 2) path 'ReturnQuoteAmount',
RIRQZW decimal(5, 2) path 'ReturnQuoteAmountOverTime',
NUMMER varchar(20) path 'Customer1/Nummer'
) info_req
wäre meine Idee dazu gewesen
wäre meine Idee dazu gewesen
Wo liegt das Problem? Das sollte eigentlich die korrekte Syntax sein.
Birgitta