2016-07-18 24 views
0

私はのように見えるのOracle XMLType型のXMLラインがあります。最適化OracleのXMLクエリ

<?xml version="1.0" encoding="UTF-8"?> 
<Agregat xmlns:DGE="urn:ops:rncps:dge" xmlns:SNGI="urn:cnav:sngi"> 
<DGE:Document> 
    <DGE:Donnee> 
    <ns4:SignalementRetraite xmlns:ns4="http://dge.isic.cnav/Signalement"> 
     <Emetteur> 
      <CdOrgGestionnaire>0006</CdOrgGestionnaire> 
     </Emetteur> 
     <Demandeur> 
      <NumAsrDem>2530197302056</NumAsrDem> 
      <CodeCertifECL>0</CodeCertifECL> 
      <NmAsrDem>PRUDENT</NmAsrDem> 
      <PrnAsrDem>MUGUETTE</PrnAsrDem> 
      <DtNaiAss>19530120</DtNaiAss> 
      <DtCertNum>1988-01-01+01:00</DtCertNum> 
     </Demandeur> 
     <DemandeDP> 
      <CodeModeDeLiquidation>01</CodeModeDeLiquidation> 
     </DemandeDP> 
     <AdresseCommunication> 
      <AdrTyp>A</AdrTyp> 
      <AdrCivil>Mme</AdrCivil> 
      <AdrRaisSoc /> 
      <AdrNmComm>PRUDENT</AdrNmComm> 
      <AdrPrnComm>MUGUETTE</AdrPrnComm> 
      <AdrNumVoie>119 RESIDENCE DES ALIZES</AdrNumVoie> 
      <AdrCdPostal>97354</AdrCdPostal> 
      <AdrCdCommune>97309</AdrCdCommune> 
      <AdrLocBurDistributeur>REMIRE MONTJOLY</AdrLocBurDistributeur> 
      <AdrPays /> 
      <AdrCdPays>FR</AdrCdPays> 
     </AdresseCommunication> 
     <PremiereManifestation> 
      <DtPremiereManifestation>2008-12-18+01:00</DtPremiereManifestation> 
      <CodeCanalPremiereManifestation>02</CodeCanalPremiereManifestation> 
      <DtDelivCerfa>2008-12-18+01:00</DtDelivCerfa> 
      <CodeCanalDelivCerfa>02</CodeCanalDelivCerfa> 
      <CodeRegimeCompetentPresume>2294</CodeRegimeCompetentPresume> 
     </PremiereManifestation> 
    </ns4:SignalementRetraite> 
    </DGE:Donnee> 
</DGE:Document> 
</Agregat> 

次のクエリを実行するには時間がかかりすぎる、あなたはそれを最適化する方法上の任意のアイデアを持っていますか?

SELECT DISTINCT RPAD(NVL(extractValue(Emetteur.column_value, '//Emetteur//CdOrgGestionnaire'),' '),4,' ')    AS CdOrgGestionnaire, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//NumAsrDem'),' '),13,' ')         AS NumAsrDem, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//CodeCertifECL'),' '),1,' ')        AS CodeCertifECL, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//NmAsrDem'),' '),63,' ')         AS NmAsrDem, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//PrnAsrDem'),' '),50,' ')         AS PrnAsrDem, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//DtNaiAss'),' '),10,' ')         AS DtNaiAss, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//NmMarAssDem'),' '),63,' ')         AS NmMarAssDem, 
    RPAD(NVL(extractValue(Demandeur.column_value, '//Demandeur//DtCertNum'),' '),10,' ')         AS DtCertNum, 
    RPAD(NVL(extractValue(DemandeDP.column_value, '//DemandeDP//IdentifiantDemande'),' '),16,' ')       AS IdentifiantDemande, 
    RPAD(NVL(extractValue(DemandeDP.column_value, '//DemandeDP//CodeModeDeLiquidation'),' '),2,' ')      AS CodeModeDeLiquidation , 
    RPAD(NVL(extractValue(PremiereManifestation.column_value, '//PremiereManifestation//DtPremiereManifestation'),' '),10,' ')      AS DtPremiereManifestation, 
    RPAD(NVL(extractValue(PremiereManifestation.column_value, '//PremiereManifestation//CodeCanalPremiereManifestation'),' '),2,' ')      AS CdCanalPremiereManif, 
    RPAD(NVL(extractValue(PremiereManifestation.column_value, '//PremiereManifestation//DtDelivCerfa'),' '),10,' ')      AS DtDelivCerfa, 
    RPAD(NVL(extractValue(PremiereManifestation.column_value, '//PremiereManifestation//CodeCanalDelivCerfa'),' '),2,' ')      AS CodeCanalDelivCerfa, 
    RPAD(NVL(extractValue(PremiereManifestation.column_value, '//PremiereManifestation//CodeRegimeCompetentPresume'),' '),4,' ')      AS CodeRegimeCompetentPresume 

    FROM COMMUN.SESSION_TEMP_XML s , TABLE(XMLSequence(extract(s.xml_data , '//Emetteur' , 'xmlns:ns4="http://dge.isic.cnav/Signalement"'))) Emetteur, 
    TABLE(XMLSequence(extract(s.xml_data , '//Demandeur' , 'xmlns:ns4="http://dge.isic.cnav/Signalement"'))) Demandeur, 
    TABLE(XMLSequence(extract(s.xml_data , '//DemandeDP' , 'xmlns:ns4="http://dge.isic.cnav/Signalement"'))) DemandeDP, 
    TABLE(XMLSequence(extract(s.xml_data , '//PremiereManifestation' , 'xmlns:ns4="http://dge.isic.cnav/Signalement"'))) PremiereManifestation 

選択した列の数がパフォーマンスを低下させますか?

改善方法はありますか?

よろしくお願いいたします。

+0

親要素ごとに複数の 'Emetteur'、' Demandeur'、 'DemandeDP'または' PremiereManifestation'要素がありますか?そうでなければ 'XMLSequence'文がなぜ必要ですか? – MT0

+0

申し訳ありません、それは結合の問題でした。私は他の開発者コードを維持していて、テーブルに対する参加がなかったので注意を払わなかった... – Fozix

答えて

0

このようにクエリを書き直しても機能しますが、参加する必要はありません。

SELECT DISTINCT RPAD(NVL(extractValue(s.xml_data, '//Emetteur//CdOrgGestionnaire'),' '),4,' ')    AS CdOrgGestionnaire, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//NumAsrDem'),' '),13,' ')         AS NumAsrDem, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//CodeCertifECL'),' '),1,' ')        AS CodeCertifECL, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//NmAsrDem'),' '),63,' ')         AS NmAsrDem, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//PrnAsrDem'),' '),50,' ')         AS PrnAsrDem, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//DtNaiAss'),' '),10,' ')         AS DtNaiAss, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//NmMarAssDem'),' '),63,' ')         AS NmMarAssDem, 
    RPAD(NVL(extractValue(s.xml_data, '//Demandeur//DtCertNum'),' '),10,' ')         AS DtCertNum, 
    RPAD(NVL(extractValue(s.xml_data, '//DemandeDP//IdentifiantDemande'),' '),16,' ')       AS IdentifiantDemande, 
    RPAD(NVL(extractValue(s.xml_data, '//DemandeDP//CodeModeDeLiquidation'),' '),2,' ')      AS CodeModeDeLiquidation, 
    RPAD(NVL(extractValue(s.xml_data, '//PremiereManifestation//DtPremiereManifestation'),' '),10,' ')      AS DtPremiereManifestation, 
    RPAD(NVL(extractValue(s.xml_data, '//PremiereManifestation//CodeCanalPremiereManifestation'),' '),2,' ')      AS CdCanalPremiereManif, 
    RPAD(NVL(extractValue(s.xml_data, '//PremiereManifestation//DtDelivCerfa'),' '),10,' ')      AS DtDelivCerfa, 
    RPAD(NVL(extractValue(s.xml_data, '//PremiereManifestation//CodeCanalDelivCerfa'),' '),2,' ')      AS CodeCanalDelivCerfa, 
    RPAD(NVL(extractValue(s.xml_data, '//PremiereManifestation//CodeRegimeCompetentPresume'),' '),4,' ')      AS CodeRegimeCompetentPresume 
    FROM (select xml_data from COMMUN.SESSION_TEMP_XML where id=1) s 

ありがとうございました。