Volubis, le forum IBM i Index du Forum Volubis, le forum IBM i
avec les clubs Informatiques IPL et Bretagne.
 
 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

(sans sujet)

 
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Lun 21 Oct 2019, 14:05:11    Sujet du message: (sans sujet) Répondre en citant

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


Dernière édition par celine.bouzat le Lun 21 Oct 2019, 15:09:19; édité 2 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
mgris



Inscrit le: 04 Oct 2018
Messages: 3

MessagePosté le: Lun 21 Oct 2019, 14:43:42    Sujet du message: (sans sujet) Répondre en citant

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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Lun 21 Oct 2019, 14:46:36    Sujet du message: (sans sujet) Répondre en citant

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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Lun 21 Oct 2019, 15:59:21    Sujet du message: (sans sujet) Répondre en citant

J'ai aussi essayer cela pour garder la hiérarchie entre les balises.

Code:
 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


Mais j'ai le message d'erreur suivant :

Citation:
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]
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Lun 21 Oct 2019, 16:16:27    Sujet du message: Re: (sans sujet) Répondre en citant

[quote="celine.bouzat"]J'ai aussi essayer cela pour garder la hiérarchie entre les balises.

Code:
 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


Mais j'ai le message d'erreur suivant :

Citation:
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.
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
vazymimil



Inscrit le: 28 Sep 2018
Messages: 16

MessagePosté le: Mar 22 Oct 2019, 10:34:57    Sujet du message: (sans sujet) Répondre en citant

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

Code:
    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:
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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Mar 22 Oct 2019, 13:32:42    Sujet du message: (sans sujet) Répondre en citant

Bonjour Nicolas,

Merci beaucoup pour votre réponse et votre aide.

Cela marche Very Happy Je vais pouvoir continuer mon découpage.

Cordialement
Céline
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
celine.bouzat



Inscrit le: 16 Oct 2019
Messages: 6

MessagePosté le: Mer 23 Oct 2019, 10:55:38    Sujet du message: sqlstate 42926 - Locators are not allowed with COMMIT(*NONE) Répondre en citant

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
Citation:
sqlstate : 42926 - Locators are not allowed with COMMIT(*NONE)

Bon du coup j’ai fait un CLLE qui active le contrôle de validation avec
Code:
STRCMTCTL LCKLVL(*ALL) CMTSCOPE(*JOB)

Puis j’ai rajouter dans mon SQLRPGLE la ligne sur les options de compil sql
Code:
exec sql set option commit = *all ;

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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
cmasse
Site Admin


Inscrit le: 14 Fév 2007
Messages: 716
Localisation: Nantes

MessagePosté le: Lun 04 Nov 2019, 16:49:28    Sujet du message: Commit Répondre en citant

pas de STRCMTCL avant de lancer le pgm, il faut mettre *CHG dans le paramètre COMMIT de la commande de compil. (CRTSQLRPGI)
_________________
Christian Massé (Volubis.fr)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
monthi



Inscrit le: 11 Sep 2018
Messages: 42
Localisation: Paris

MessagePosté le: Mar 05 Nov 2019, 07:35:58    Sujet du message: (sans sujet) Répondre en citant

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
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Volubis, le forum IBM i Index du Forum -> langages Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com

Anti Bot Question MOD - phpBB MOD against Spam Bots