Anmelden

View Full Version : SQL HTTPPOSTCLOB in Verbindung mit XMLTABLE



Seiten : 1 [2]

oulbrich
24-03-21, 08:40
@Brigitta Ich habe das genauso gemacht. Es werden aber 0 Sätze ausgewählt.

Hier die Testumgebung. Bei den XML Daten habe ich den Anfang durch eine # ersetzt sonst kann ich das nicht posten.


create or replace variable mylib.xml_var1 varchar(10000) ccsid 1208;


values mylib.xml_var1;


set mylib.xml_var1 =
'#TraC SQ="164">
#Result RC="OK">
#UserMessage>Summe falsch: 528.9#/UserMessage>
#Warning>w-#T_DIFF 8.50 PayA[].Amt-ESR.T#/Warning>
#/Result>
#ESR D="2021-03-23T13:42:23" TN="900000041"/>
#Fis TID="16">
#Code>V0;7831130;Kassenbeleg-V1;Beleg^528.90_0.00_0.00_0.00_0.00^537.40:Bar;16; 9;2021-03-23T12:42:23.000Z;2021-03-23T12:42:23.000Z;ecdsa-plain-SHA256;unixTime;O9q2KbD0LlUrsLPlXl8gv9hOXwB829VM7I Lhr6e2rFFgyil5VP7IAupwVcuExDh0q1Gk5pBapdEUY19z42IX LeEVVbX18w==;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</Code>
#Tag Label="TrNr:" Value="16" Name="FN"/>
#Tag Label="Beg.:" Value="2021-03-23 13:42:23" Name="StartD"/>
#Tag Label="Ende:" Value="2021-03-23 13:42:23" Name="FinishD"/>
#Tag Label="TSE :" Value="0123456789abcdef0123456789abcdef0123456789abcdef01 23456789abcdef" Name="Serial"/>
#Tag Label="SigZ:" Value="9" Name="SignCnt"/>
#Tag Label="Sign:" Value="O9q2KbD0LlUrsLPlXl8gv9hOXwB829VM7ILhr6e2rFFgyil5VP 7IAupwVcuExDh0q1Gk5pBapdEUY19z42IXLeEVVbX18w==" Name="Sign"/>
#/Fis>
#/TraC>';


Select *
From Xmltable('/trac'
Passing Xmlparse(Document mylib.xml_var1)
Columns SQ VarChar(10) Path '@sq',
Label1 VarChar(25) Path './esr/fis/tag/@label',
Value1 VarChar(125) Path './esr/fis/tag/@value',
Name1 VarChar(25) Path './esr/fis/tag/@name',
Label2 VarChar(25) Path './esr/fis/tag/tag/@label',
Value2 VarChar(125) Path './esr/fis/tag/tag/@value',
Name2 VarChar(25) Path './esr/fis/tag/tag/@name',
Label3 VarChar(25) Path './esr/fis/tag/tag/tag/@label',
Value3 VarChar(125) Path './esr/fis/tag/tag/tag/@value',
Name3 VarChar(25) Path './esr/fis/tag/tag/tag/@name',
Label4 VarChar(25) Path './esr/fis/tag/tag/tag/tag/@label',
Value4 VarChar(125) Path './esr/fis/tag/tag/tag/tag/@value',
Name4 VarChar(25) Path './esr/fis/tag/tag/tag/tag/@name',
Label5 VarChar(25) Path './esr/fis/tag/tag/tag/tag/tag/@label',
Value5 VarChar(125) Path './esr/fis/tag/tag/tag/tag/tag/@value',
Name5 VarChar(25) Path './esr/fis/tag/tag/tag/tag/tag/@name',
Label6 VarChar(25) Path './esr/fis/tag/tag/tag/tag/tag/tag/@label',
Value6 VarChar(125) Path './esr/fis/tag/tag/tag/tag/tag/tag/@value',
Name6 VarChar(25) Path './esr/fis/tag/tag/tag/tag/tag/tag/@name')
As Result;

select mylib.xml_var1 From SYSIBM.SYSDUMMY1

oulbrich
24-03-21, 08:44
@Fuerchau. Wie würde das mit dem CROSS JOIN LATERAL in meinem Bsp. aussehen ? Brauche ich dann keine Union mehr?

Andreas_Prouza
24-03-21, 09:00
Beim XPath achte auf Groß/Klein Schreibung.

oulbrich
24-03-21, 09:05
Danke! Das habe ich auch schon gemerkt.

Kann mir einer sagen wie ich XML hier ins Forum posten kann? Wenn ich das mache werden die XML Daten nach dem Post entfernt.

Robi
24-03-21, 09:51
dafür gibt es doch die möglichkeit Code zu setzen

Du musst nur erst auf erweitert klicken

oulbrich
24-03-21, 10:04
'<TraC SQ="164"> <Result RC="OK">
<UserMessage>Summe falsch: 528.9</UserMessage>
<Warning>w-#T_DIFF 8.50 PayA[].Amt-ESR.T</Warning>
</Result>
<ESR D="2021-03-23T13:42:23" TN="900000041"/>
<Fis TID="16">
<Code>V0;7831130;Kassenbeleg-V1;Beleg^528.90_0.00_0.00_0.00_0.00^537.40:Bar;16; 9;2021-03-23T12:42:23.000Z;2021-03-23T12:42:23.000Z;ecdsa-plain-SHA256;unixTime;O9q2KbD0LlUrsLPlXl8gv9hOXwB829VM7I Lhr6e2rFFgyil5VP7IAupwVcuExDh0q1Gk5pBapdEUY19z42IX LeEVVbX18w==;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==</Code>
<Tag Label="TrNr:" Value="16" Name="FN"/><Tag Label="TrNr:" Value="16" Name="FN"/>
</Fis>
</TraC>';

oulbrich
24-03-21, 10:06
Bei CODE nimmt er auch alle XML Tag raus

Fuerchau
24-03-21, 10:12
Cross Lateral findest du hier:
http://newsolutions.de/forum-systemi-as400-i5-iseries/threads/22399-SQL-Datens%C3%83%C2%A4tze-untereinander-darstellen-(xmlserialize-anders-herum)?highlight=cross+lateral

Ich habe das bei mir inzwischen schon verwendet, da im XPPS (Infor) viele Tabellen mit Pseudo-Arrays vorhanden sind. Die AS/400, IBM i, optimiert dies grandios.

oulbrich
24-03-21, 10:32
Mir ist leider nicht ganz klar wie mir das bei meinen XML String helfen kann. Könntest du bitte einen kleinen Bsp. Code bezogen auf meinen xml String senden. Besten Dank.

oulbrich
24-03-21, 10:44
Ich habe das Bsp. mal etwas vereinfacht. Mit nur einem TAG funktioniert es. Bei zwei TAG gib es eine Fehlermeldung aus der ich aber nicht schlau werden.

602




create or replace variable mylib.xml_var varchar(10000) ccsid 1208;


values mylib.xml_var;


set mylib.xml_var =
'<trac>#TraC> #Fis>
#Tag Label="Label1" Value="16" Name="FN"/> <Tag Label="Label2" Value="17" Name="FN"/>
#/Fis>
#/TraC>
</trac>';


SELECT *
FROM XMLTABLE('/TraC'
PASSING XMLPARSE(
DOCUMENT mylib.xml_var
)
COLUMNS
Label1 varchar(256) PATH './Fis/Tag/@Label'
,Value1 varchar(256) PATH './Fis/Tag/@Value'
,Name1 varchar(256) PATH './Fis/Tag/@Name'
,Label2 varchar(256) PATH './Fis/Tag/Tag/@Label'
,Value2 varchar(256) PATH './Fis/Tag/Tag/@Value'
,Name2 varchar(256) PATH './Fis/Tag/Tag/@Name'
) AS RESULT;




select mylib.xml_var from sysibm.sysdummy1