× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



It sounds like you changed the grouping of your query, and are now trying
to insert more than one row into a host variable (or in this case a file).

XMLGROUP is an aggregate function, the resulting XML value is a single
value that represents all rows in the grouping.
If you group by D01.LCNT, then you get one group per LCNT value (more
groups/rows). If you do not group by this column, then it is impossible to
represent the column value for all rows in the group as a single value
without using an aggregate function. (e.g. MIN, MAX, AVG, etc)

You may want to do the join (which involves LCNT) first, and then perform
grouping on the join result.

For easier debug, you might want to run the query using run sql scripts or
IBM Data Studio to make sure you have the query written correctly, and
only then write the RPG program.

The SQL/XML publishing functions are good news in that they push down the
work and optimization of producing XML into DB2...but they also require
education and practice to master.

There are some SQL workshops available for training that might help with
these kinds of queries.
http://www-03.ibm.com/systems/power/software/i/db2/education/advanced-sql.html



Nick Lawrence
DB2 for IBM i


Yesterday we pioneered for today; today, we are pioneering for tomorrow.
- Thomas J. Watson, Sr.






From: rpg400-l-request@xxxxxxxxxxxx
To: rpg400-l@xxxxxxxxxxxx
Date: 02/09/2015 01:02 PM
Subject: RPG400-L Digest, Vol 14, Issue 58
Sent by: "RPG400-L" <rpg400-l-bounces@xxxxxxxxxxxx>





message: 1
date: Mon, 9 Feb 2015 08:56:40 -0500
from: Guy Henza <guyhenza@xxxxxxxxxxx>
subject: SQLRPGILE writing XML to the IFS getting a SQL0811 error



First of all many thanks to Birgitta Hauser, Mike Cain, and
Nick Lawrence for all of their excellent articles.



I am writing an EDI x12 850 PO program to write XML to the
IFS. All is going well until I get down to writing the detail PO1
segments. All of the detail files (8 of them) have an extra Line# in the
key field. When I include it I get a SQL0811 error. When I exclude
it I get all 14 rows of detail written out to the XML file.



Again, the problem with the code below is with D01.LCNT in
there I get SQL0811, without it I can't connect to the rest of my detail
files;
like PID, REF, N9, MSG and DTM.





D
MYXMLDOC
S
SQLTYPE(XML_CLOB_FILE)

d
MsgDta
s 52a

d
ts
s
z inz



EXEC SQL SET OPTION
COMMIT=*NONE, DATFMT=*ISO, CLOSQLCSR=*ENDACTGRP;

ts = %timestamp();



CLEAR MYXMLDOC;

MYXMLDOC_NAME =
'/edi/po_' + %char(ts) + '.xml';

MYXMLDOC_NL =
%LEN(%TRIM(MYXMLDOC_NAME));

MyXMLDoc_FO = SQFOVR;
//Replace if exists



Exec SQL

WITH
D01 AS (


SELECT D01.TPID,D01.PO#,D01.REL,D01.CTL#,D01.MBX,D01.LCNT, -- does not
with LCNT


XMLGROUP(case when PO101 <> ' ' then PO101 end as
"PO101",


case when PO102 <> 0 then PO102
end as "PO102",


case when PO414 <> 0 then PO414 end as
"PO414"


ORDER BY D01.TPID,D01.PO#,D01.REL,D01.CTL#,D01.MBX,D01.LCNT


OPTION ROW "PO1"


ROOT "detail" )


AS detail


FROM EDI850DP100 D01


GROUP BY D01.TPID,D01.PO#,D01.REL,D01.CTL#,D01.MBX,D01.LCNT )


,


H04 AS (


SELECT H04.TPID,H04.PO#,H04.REL,H04.CTL#,H04.MBX, -- secondary header file
with multiple rows


XMLGROUP(DTM01 AS "DTM01",


DTM02 AS "DTM02"


ORDER BY H04.TPID,H04.PO#,H04.REL,H04.CTL#,H04.MBX


OPTION ROW "Date"


ROOT "DTM" )


AS DTM


FROM EDI850HP400 H04

GROUP
BY H04.TPID,H04.PO#,H04.REL,H04.CTL#,H04.MBX )




SELECT XMLDOCUMENT(


XMLELEMENT(NAME "order",


XMLFOREST(H01.TPID AS "TPID",


H01.PO# AS "PO",


H04.DTM AS "DTM",


XMLFOREST(


D01.detail AS "detail"


) AS order_detail )))


AS order_doc


into :MyXMLDoc


FROM EDI850HP100 H01


left outer join H04 on H04.TPID = H01.TPID


and H04.PO# = H01.PO#


and H04.REL = H01.REL


and H04.CTL# = H01.CTL#


and H04.MBX = H01.MBX


left outer join D01 on D01.TPID = H01.TPID


and D01.PO# = H01.PO#

and
D01.REL = H01.REL


and D01.CTL# = H01.CTL#


and D01.MBX = H01.MBX


;



If SQLCODE
<> *Zeros;

EXEC SQL
Get Diagnostics Condition 1 :MsgDta = MESSAGE_TEXT;

Dsply
MsgDta;

else;

Dsply 'XML
Document generated';

EndIf;

*InLR = *On;



Run results;DSPLY Result of SELECT more than one row.



<?xml version="1.0"
encoding="UTF-8"?>

<order><TPID>abc123
</TPID><PO>0000249343899002
</PO><DTM><DTM><Date><DTM01>037</DTM01><DTM02>20120910</DTM02></Date><Date><DTM01>038</DTM01><DTM02>20120915</DTM02></Date><Date><DTM01>063</DTM01><DTM02>20120917</DTM02></Date><Date><DTM01>064</DTM01><DTM02>20120910</DTM02></Date></DTM></DTM><ORDER_DETAIL><detail><detail><PO1><PO101>6
</PO101><PO102>2880</PO102></PO1></detail></detail></ORDER_DETAIL></order>



The DTM wrote out 4 rows but the
PO1 failed after the first one (and it?s line #6 not one???).!



After removing the D01.LCNT
I get all 14 PO1 rows;



DSPLY XML Document
generated



<?xml version="1.0"
encoding="UTF-8"?>

<order><TPID>DOLLAR
TREE KY </TPID><PO>0000249343899002
</PO><DTM><DTM><Date><DTM01>037</DTM01><DTM02>20120910</DTM02></Date><Date><DTM01>038</DTM01><DTM02>20120915</DTM02></Date><Date><DTM01>063</DTM01><DTM02>20120917</DTM02></Date><Date><DTM01>064</DTM01><DTM02>20120910</DTM02></Date></DTM></DTM><ORDER_DETAIL><detail><detail><PO1><PO101>1
</PO101><PO102>4800</PO102></PO1><PO1><PO101>2
</PO101><PO102>7200</PO102></PO1><PO1><PO101>3
</PO101><PO102>2400</PO102></PO1><PO1><PO101>4
</PO101><PO102>4320</PO102></PO1><PO1><PO101>5
</PO101><PO102>1200</PO102></PO1><PO1><PO101>6
</PO101><PO102>2880</PO102></PO1><PO1><PO101>7
</PO101><PO102>4800</PO102></PO1><PO1><PO101>8
</PO101><PO102>4320</PO102></PO1><PO1><PO101>9
</PO101><PO102>3600</PO102></PO1><PO1><PO101>10
</PO101><PO102>6000</PO102></PO1><PO1><PO101>11
</PO101><PO102>2400</PO102></PO1><PO1><PO101>12
</PO101><PO102>7200</PO102></PO1><PO1><PO101>13
</PO101><PO102>4320</PO102></PO1><PO1><PO101>14
</PO101><PO102>21600</PO102></PO1></detail></detail></ORDER_DETAIL></order>




Regards,

Guy Henza




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.