Anmelden

View Full Version : XML in PF übertragen (Variablenproblem)



Seiten : 1 [2]

dholtmann
07-10-15, 10:25
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.

Fuerchau
07-10-15, 10:32
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.

dholtmann
07-10-15, 10:44
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

Fuerchau
07-10-15, 10:47
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

dholtmann
07-10-15, 10:51
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

Fuerchau
07-10-15, 11:51
Mich würde da schon interessieren, was denn die NULL-Anzeiger mal anderes als 0 anzeigen!

dholtmann
07-10-15, 11:58
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.

B.Hauser
07-10-15, 12:28
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

dholtmann
07-10-15, 13:25
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

B.Hauser
07-10-15, 23:18
wäre meine Idee dazu gewesen

Wo liegt das Problem? Das sollte eigentlich die korrekte Syntax sein.

Birgitta