(sans sujet)
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
(sans sujet)
Bonjour,
Je rencontre un problème pour découper du xml avec le xmltable.
J’ai une structure comme suit
<?xml version="1.0" encoding="UTF-8"?>
<podPoc>
<journey>
<routeId>PV-TEST107028104</routeId>
<site id="PAP-002" >
<consignment type="D">
<orderRef>JD1095-12123456</orderRef>
<status>X</status>
<consignmentDetail>
<detailRef>445567890245</detailRef>
<customerDetailRef>Palette 1 Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>000000015472</detailRef>
<customerDetailRef>Carton Bouillon de Volaille Knorr</customerDetailRef>
</consignmentDetail>
<consignmentDetail>
<detailRef>0000000150212</detailRef>
<customerDetailRef>Carton Tubes 1kg Nutella</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
<consignmentDetail>
<detailRef>4234567890245</detailRef>
<customerDetailRef>Roll Metallique 1 Frais Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>0000000037668</detailRef>
<customerDetailRef>Jambon cuit superieur Label Rouge origine France 6,5Kg</customerDetailRef>
<clauseInfo>
<clause>CTR</clause>
<clauseQty>-2</clauseQty>
</clauseInfo>
</consignmentDetail>
<consignmentDetail>
<detailRef>0000000039439</detailRef>
<customerDetailRef>Carton de 6 Creme Excellence Cuisine et Patisserie 35%MG 1L</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
</consignment>
<consignment type="D">
<orderRef>JD1095-12123465</orderRef>
<status>R</status>
<clauseInfo>
<clause>CTR</clause>
<description>Casse - Réfusée</description>
</clauseInfo>
<consignmentDetail>
<detailRef>1234567890123</detailRef>
<customerDetailRef>Palette 1 Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>1234567890130</detailRef>
<customerDetailRef>Carton Pasta Pro 5Kg</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
</consignment>
<task taskName="Livraison Emballages" taskStartTime="2019-10-17T21:02:56" taskEndTime="2019-10-17T21:03:37.590" />
<task taskName="Reprise Emballage" taskStartTime="2019-10-17T21:03:37.977" taskEndTime="2019-10-17T21:03:39.657" />
</site>
</journey>
</podPoc>
Et je n’arrive pas a découper le xml avec du sql de façon à tous ramener toutes les données en une seule fois.
Voici ce que j’ai essayer :
SELECT *
FROM
XMLTABLE('$result' PASSING XMLPARSE(DOCUMENT GET_XML_FILE('fichier_test_xml.xml') ) as "result"
COLUMNS
journey_routeId varchar(100) PATH 'podPoc/journey/routeId',
site_id varchar(100) PATH 'podPoc/journey/site/@id',
consignment_type varchar(100) PATH 'podPoc/journey/site/consignment/@type',
consignment_orderRef varchar(100) PATH 'podPoc/journey/site/consignment/orderRef',
consignment_status varchar(100) PATH 'podPoc/journey/site/consignment/status',
consignmentDetail_1_detailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/detailRef',
consignmentDetail_1_customerDetailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/customerDetailRef',
clauseInfo_clause varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/clauseInfo/clause',
clauseInfo_clauseQty varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/clauseInfo/clauseQty',
consignmentDetail_2_detailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/detailRef',
consignmentDetail_2_customerDetailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/customerDetailRef',
clauseInfo_2_clause varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/clauseInfo/clause',
clauseInfo_2_clauseQty varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/clauseInfo/clauseQty',
taskName varchar(100) PATH 'podPoc/journey/site/taskName',
taskStartTime varchar(100) PATH 'podPoc/journey/site/taskStartTime'
) AS tmp
Merci pour votre aide.
Cordailement
Je rencontre un problème pour découper du xml avec le xmltable.
J’ai une structure comme suit
<?xml version="1.0" encoding="UTF-8"?>
<podPoc>
<journey>
<routeId>PV-TEST107028104</routeId>
<site id="PAP-002" >
<consignment type="D">
<orderRef>JD1095-12123456</orderRef>
<status>X</status>
<consignmentDetail>
<detailRef>445567890245</detailRef>
<customerDetailRef>Palette 1 Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>000000015472</detailRef>
<customerDetailRef>Carton Bouillon de Volaille Knorr</customerDetailRef>
</consignmentDetail>
<consignmentDetail>
<detailRef>0000000150212</detailRef>
<customerDetailRef>Carton Tubes 1kg Nutella</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
<consignmentDetail>
<detailRef>4234567890245</detailRef>
<customerDetailRef>Roll Metallique 1 Frais Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>0000000037668</detailRef>
<customerDetailRef>Jambon cuit superieur Label Rouge origine France 6,5Kg</customerDetailRef>
<clauseInfo>
<clause>CTR</clause>
<clauseQty>-2</clauseQty>
</clauseInfo>
</consignmentDetail>
<consignmentDetail>
<detailRef>0000000039439</detailRef>
<customerDetailRef>Carton de 6 Creme Excellence Cuisine et Patisserie 35%MG 1L</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
</consignment>
<consignment type="D">
<orderRef>JD1095-12123465</orderRef>
<status>R</status>
<clauseInfo>
<clause>CTR</clause>
<description>Casse - Réfusée</description>
</clauseInfo>
<consignmentDetail>
<detailRef>1234567890123</detailRef>
<customerDetailRef>Palette 1 Cuisine Centrale</customerDetailRef>
<consignmentDetail>
<detailRef>1234567890130</detailRef>
<customerDetailRef>Carton Pasta Pro 5Kg</customerDetailRef>
</consignmentDetail>
</consignmentDetail>
</consignment>
<task taskName="Livraison Emballages" taskStartTime="2019-10-17T21:02:56" taskEndTime="2019-10-17T21:03:37.590" />
<task taskName="Reprise Emballage" taskStartTime="2019-10-17T21:03:37.977" taskEndTime="2019-10-17T21:03:39.657" />
</site>
</journey>
</podPoc>
Et je n’arrive pas a découper le xml avec du sql de façon à tous ramener toutes les données en une seule fois.
Voici ce que j’ai essayer :
SELECT *
FROM
XMLTABLE('$result' PASSING XMLPARSE(DOCUMENT GET_XML_FILE('fichier_test_xml.xml') ) as "result"
COLUMNS
journey_routeId varchar(100) PATH 'podPoc/journey/routeId',
site_id varchar(100) PATH 'podPoc/journey/site/@id',
consignment_type varchar(100) PATH 'podPoc/journey/site/consignment/@type',
consignment_orderRef varchar(100) PATH 'podPoc/journey/site/consignment/orderRef',
consignment_status varchar(100) PATH 'podPoc/journey/site/consignment/status',
consignmentDetail_1_detailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/detailRef',
consignmentDetail_1_customerDetailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/customerDetailRef',
clauseInfo_clause varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/clauseInfo/clause',
clauseInfo_clauseQty varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/clauseInfo/clauseQty',
consignmentDetail_2_detailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/detailRef',
consignmentDetail_2_customerDetailRef varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/customerDetailRef',
clauseInfo_2_clause varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/clauseInfo/clause',
clauseInfo_2_clauseQty varchar(100) PATH 'podPoc/journey/site/consignment/consignmentDetail/consignmentDetail/clauseInfo/clauseQty',
taskName varchar(100) PATH 'podPoc/journey/site/taskName',
taskStartTime varchar(100) PATH 'podPoc/journey/site/taskStartTime'
) AS tmp
Merci pour votre aide.
Cordailement
Modifié en dernier par celine.bouzat le lun. 21 oct. 2019, 15:09:19, modifié 2 fois.
(sans sujet)
Bonjour,
Votre fichier XML comporte des tableaux, vous avez plusieurs items consignment et consignmentDetail, vous devez donc en tenir compte dans votre requête pour récupérer ces informations.
Si vous souhaitez retrouver toutes vos données en une seule fois, il faut que vous modifiez le path de façon à descendre au plus petit niveau, puis remonter dans l'arborescence
Sinon, vous devez préciser sur quel item se fait la sélection
Comme dans l'extrait suivant:
consignment_status varchar(100) PATH 'podPoc/journey/site/consignment[1]/status',
consignmentDetail_1_detailRef varchar(100) PATH 'podPoc/journey/site/consignment[1]/consignmentDetail[1]/detailRef',
@ bientôt
Marie
Votre fichier XML comporte des tableaux, vous avez plusieurs items consignment et consignmentDetail, vous devez donc en tenir compte dans votre requête pour récupérer ces informations.
Si vous souhaitez retrouver toutes vos données en une seule fois, il faut que vous modifiez le path de façon à descendre au plus petit niveau, puis remonter dans l'arborescence
Sinon, vous devez préciser sur quel item se fait la sélection
Comme dans l'extrait suivant:
consignment_status varchar(100) PATH 'podPoc/journey/site/consignment[1]/status',
consignmentDetail_1_detailRef varchar(100) PATH 'podPoc/journey/site/consignment[1]/consignmentDetail[1]/detailRef',
@ bientôt
Marie
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
(sans sujet)
Bonjour Marie,
Merci pour votre réponse rapide.
Le problème c'est que je ne connais pas la taille de mes tableaux.
J'ai aussi essayer de le faire en plusieurs sous-requête mais du coup je n'ai plus le lien entre les tableaux.
Cordialement
Céline
Merci pour votre réponse rapide.
Le problème c'est que je ne connais pas la taille de mes tableaux.
J'ai aussi essayer de le faire en plusieurs sous-requête mais du coup je n'ai plus le lien entre les tableaux.
Cordialement
Céline
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
(sans sujet)
J'ai aussi essayer cela pour garder la hiérarchie entre les balises.
Mais j'ai le message d'erreur suivant :
[/code]
Code : Tout sélectionner
SELECT * FROM
XMLTABLE('$result/podPoc/journey/site/consignment/consignmentDetail/consignmentDetail' PASSING XMLPARSE(DOCUMENT GET_XML_FILE('PODPOCExport_17-10-2019_21.03.44.69.xml') ) as "result"
COLUMNS
journey_routeId varchar(100) PATH '../../routeId',
site_id varchar(100) PATH '../../site/@id',
consignment_type varchar(100) PATH '@type',
consignment_orderRef varchar(100) PATH 'orderRef',
consignment_status varchar(100) PATH 'status',
consignmentDetail varchar(10000) path 'consignmentDetail'
) AS tmp ,
XMLTABLE('$result1/consignmentDetail' PASSING consignmentDetail as "result1"
COLUMNS
consignmentDetail_1_detailRef varchar(100) PATH 'detailRef',
consignmentDetail_1_customerDetailRef varchar(100) PATH 'customerDetailRef'
) AS tmp1
Etat sql : 10507
Code fournisseur : -16011
Message : le résultat d'une expression d'étape intermédiaire dans une expression XPath contient une valeur atomique.
[/code]
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
Re: (sans sujet)
celine.bouzat a écrit :J'ai aussi essayer cela pour garder la hiérarchie entre les balises.
Mais j'ai le message d'erreur suivant :Code : Tout sélectionner
SELECT * FROM XMLTABLE('$result/podPoc/journey/site/consignment/consignmentDetail/consignmentDetail' PASSING XMLPARSE(DOCUMENT GET_XML_FILE('PODPOCExport_17-10-2019_21.03.44.69.xml') ) as "result" COLUMNS journey_routeId varchar(100) PATH '../../routeId', site_id varchar(100) PATH '../../site/@id', consignment_type varchar(100) PATH '@type', consignment_orderRef varchar(100) PATH 'orderRef', consignment_status varchar(100) PATH 'status', consignmentDetail varchar(10000) path 'consignmentDetail' ) AS tmp , XMLTABLE('$result1/consignmentDetail' PASSING consignmentDetail as "result1" COLUMNS consignmentDetail_1_detailRef varchar(100) PATH 'detailRef', consignmentDetail_1_customerDetailRef varchar(100) PATH 'customerDetailRef' ) AS tmp1
Etat sql : 10507
Code fournisseur : -16011
Message : le résultat d'une expression d'étape intermédiaire dans une expression XPath contient une valeur atomique.
(sans sujet)
Bonjour,
Dans votre dernière requête le type de consignmentDetail doit être XML pour être passé à XMLTABLE et son PATH est '.', les autres path ne sont pas corrects non plus
Sinon voici une requête qui voit les consignmentDetail comme une hiérarchie
Dans votre dernière requête le type de consignmentDetail doit être XML pour être passé à XMLTABLE et son PATH est '.', les autres path ne sont pas corrects non plus
Code : Tout sélectionner
journey_routeId varchar(100) PATH '../../../../routeId',
site_id varchar(100) PATH '../../../@id',
consignment_type varchar(100) PATH '../../@type',
consignment_orderRef varchar(100) PATH '../../orderRef',
consignment_status varchar(100) PATH '../../status',
consignmentDetail xml path '.'
Sinon voici une requête qui voit les consignmentDetail comme une hiérarchie
Code : Tout sélectionner
SELECT
journey_routeId,
site_id,
consignment_type,
consignment_orderRef,
consignment_status,
--consignmentDetail,
details.parentDetailRef,
details.parentCustomerDetailRef,
details.detailRef,
details.customerDetailRef
FROM
XMLTABLE('$result/podPoc/journey/site/consignment/consignmentDetail'
PASSING XMLPARSE(DOCUMENT GET_XML_FILE(...)) as "result"
COLUMNS
journey_routeId varchar(100) PATH '../../../routeId',
site_id varchar(100) PATH '../../@id',
consignment_type varchar(100) PATH '../@type',
consignment_orderRef varchar(100) PATH '../orderRef',
consignment_status varchar(100) PATH '../status',
consignmentDetail xml path '.'
) AS consignment,
XMLTABLE('$details//consignmentDetail'
PASSING consignmentDetail as "details"
COLUMNS
parentDetailRef varchar(100) PATH '../detailRef',
parentCustomerDetailRef varchar(100) PATH '../customerDetailRef',
detailRef varchar(100) PATH 'detailRef',
customerDetailRef varchar(100) PATH 'customerDetailRef'
) AS details;
Nicolas
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
(sans sujet)
Bonjour Nicolas,
Merci beaucoup pour votre réponse et votre aide.
Cela marche
Je vais pouvoir continuer mon découpage.
Cordialement
Céline
Merci beaucoup pour votre réponse et votre aide.
Cela marche

Cordialement
Céline
-
- Messages : 8
- Enregistré le : mer. 16 oct. 2019, 07:47:48
- Localisation : Montauban
sqlstate 42926 - Locators are not allowed with COMMIT(*NONE)
Bonjour,
Voici là suite du problème de XML de l’autre jour. J’ai essayer de mettre ma petite requête sql qui récupère le XML dans un programme SQLRPGLE.
Comme je m’y attendait au premier lancement et j’ai eu une erreur sql
Puis j’ai rajouter dans mon SQLRPGLE la ligne sur les options de compil sql
Je compile tous cela, et quand j'exécute le tout j'ai encore l'erreur sur le commit(*none) non autorisé.
Aurais-je loupé une étape ?
Merci pour votre aide
Voici là suite du problème de XML de l’autre jour. J’ai essayer de mettre ma petite requête sql qui récupère le XML dans un programme SQLRPGLE.
Comme je m’y attendait au premier lancement et j’ai eu une erreur sql
Bon du coup j’ai fait un CLLE qui active le contrôle de validation avecsqlstate : 42926 - Locators are not allowed with COMMIT(*NONE)
Code : Tout sélectionner
STRCMTCTL LCKLVL(*ALL) CMTSCOPE(*JOB)
Code : Tout sélectionner
exec sql set option commit = *all ;
Aurais-je loupé une étape ?
Merci pour votre aide
(sans sujet)
Dans le SQLRPGLE
encadrer la requête contenant DOCUMENT GET_XML_FILE
par :
exec sql
set transaction isolation level read committed;
exec sql
votre requête
exec sql
set transaction isolation level none;
Cdlt
encadrer la requête contenant DOCUMENT GET_XML_FILE
par :
exec sql
set transaction isolation level read committed;
exec sql
votre requête
exec sql
set transaction isolation level none;
Cdlt