PDA

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



Seiten : [1] 2

dholtmann
06-10-15, 16:09
Guten Tag zusammen,
ich habe beim Import von XML in eine Physische Datei das Problem,
dass eine der Variablen (evtl negativ mit Nachkommastelle) dafür sorgt,
dass mein Fetch nicht mehr funktioniert.
Meine Felder in der phyischen Datei sind:

RIONID 20 0 S
RIANZA 5 0 S
RIAUFO 11 2 S


Mein XML (Beispielblock):

<customer>
</customer> Customer>
CustomerNo>1000000315
NoOfSuccessfullOrders>2
Currency>EUR
Balance>-10.85
Collection>0
ReturnQuote>33
ReturnQuoteAmount>10
/Customer


Meine Prozedur:

//-----------------------------------------------------------------------
// Prozedur XML speichern
//-----------------------------------------------------------------------
P xmltosql B
D PI
D file_name S 900A
/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 varchar(13) path 'Balance'


) info_req;




exec sql open C2;
dou (sqlcode <> *zeros) and sqlcode <> 326;
exec sql fetch c2 into :rionid, :rianza, :riaufo;
write risk00r;
enddo;
/end-free
P E


Das Problem ergibt sich erst wenn ich die Zeile:

RIAUFO varchar(13) path 'Balance'

hinzufüge.

Haben Sie vllt eine Lösung parat?

Vielen Dank schon einmal!

Fuerchau
06-10-15, 17:10
Da wäre dann schon der Fehlercode und -text relevant.
Noch weiß XML ja nicht, dass der Inhalt numerisch sein soll.
Der Fehler hat da eine andere Ursache.

Fuerchau
06-10-15, 17:12
PS:
Du kannst Zeichenvariable nicht so einfach einer Dezimalvariablen zuweisen.
Entweder du definierst für XML auch dec(11, 2) oder gibst ein Alphafeld als Ziel an und wandelst dann selber mit %Dec(Feld:11:2) um.

dholtmann
07-10-15, 08:36
Guten Morgen,
dankeschön für die Antwort!

Ich habe jetzt per SQL Folgendes abgesetzt:


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 dec(11, 2) path 'Balance'
) info_req


Als Fehler erhalte ich:

Fehler bei benutzerdefinierter Funktion in Teildatei QSQPTABL.
Abbruchantwort für Nachricht CPF503E empfangen.

Hilft das weiter? Mir per Google leider nicht

Robi
07-10-15, 09:18
ggf offtopic ...
nun bin ich nicht der XML Fachmann ...

aber ist das XML überhaupt so gültig?
müßte das statt

Customer>
CustomerNo>1000000315
NoOfSuccessfullOrders>2
Currency>EUR
Balance>-10.85
Collection>0
ReturnQuote>33
ReturnQuoteAmount>10
/Customer

nicht

<Customer>
<CustomerNo>1000000315</CustomerNo>
<NoOfSuccessfullOrders>2</NoOfSuccessfullOrders>
<Currency>EUR</Currency>
<Balance>-10.85</Balance>
<Collection>0</Collection>
<ReturnQuote>33</ReturnQuote>
<ReturnQuoteAmount>10</ReturnQuoteAmount>
</Customer>
oder aber so

<Customer>
CustomerNo=1000000315
NoOfSuccessfullOrders=2
Currency=EUR
Balance=-10.85
Collection=0
ReturnQuote=33
ReturnQuoteAmount=10
</Customer>

aussehen?

dholtmann
07-10-15, 09:27
ja, entschuldige die Verwirrung. Es schaut genau so aus wie im ersten Beispiel.

<Customer>
<CustomerNo>1000000315</CustomerNo>
<NoOfSuccessfullOrders>2</NoOfSuccessfullOrders>
<Currency>EUR</Currency>
<Balance>-10.85</Balance>
<Collection>0</Collection>
<ReturnQuote>33</ReturnQuote>
<ReturnQuoteAmount>10</ReturnQuoteAmount> </Customer>
Hab es gestern bloß nicht hinbekommen, den Auszug vernünftig zu posten.
Hatte in der Vorschau immer nur die Werte.

AG1965_2
07-10-15, 09:41
In der Nachricht CPF503E steht noch mehr Info - im Joblog nachschauen.

dholtmann
07-10-15, 09:49
hab mir den Fehler durchgelesen. Ich tippe mal auf diesen Punkt als Ursache:


Bei einem der Eingabeparameter der Funktion ist ein Datenabgleichungsfehler aufgetreten.

Sowas dachte ich mir zumindest,
leider wüsste ich nicht, wie ich das korrekt übergebe.

Fuerchau
07-10-15, 09:52
Da musst du mal in die Doku schauen, was als Feldtypen denn da so unterstützt wird.
Alternativ musst du halt über Zeichenfelder gehen.

dholtmann
07-10-15, 10:14
Wo kann ich die Doku finden?

Habe mir http://publib.boulder.ibm.com/iseries/v5r2/ic2929/index.htm?info/db2/rbafzmstch2data.htm
angeschaut und dementsprechend versucht:


RIAUFO numeric(11, 2) path 'Balance'

leider funktionierte das auch nicht.

Auch:



//-----------------------------------------------------------------------
// Prozedur XML speichern
//-----------------------------------------------------------------------
P xmltosql B
D PI
D file_name S 900A
D $$AUFO S 13A
/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',
$$AUFO char(13 ) path 'Balance'


) info_req;




exec sql open C2;
dou (sqlcode <> *zeros) and sqlcode <> 326;
exec sql fetch c2 into :rionid, :rianza, :$$aufo;
riaufo = %dec($$aufo:11:2);
write risk00r;
enddo;
/end-free


bzw. :
$$AUFO varchar(13 ) path 'Balance'

wollen mir keinen erfolgreichen Versuch zurückgeben.