繁体   English   中英

Oracle-使用XMLTABLE进行外部联接

[英]Oracle - OUTER JOIN with XMLTABLE

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE   11.2.0.3.0  Production"
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production

我在一个以XMLTYPE作为列的表上创建了一个视图; 该视图正在工作,但是返回结果需要很多时间:

CREATE OR REPLACE FORCE VIEW "VW_FATT_TRASP_CONN_NEW" ("TCODICEFLUSSO", "TCODICETIPOFATTURA", "TIPOLOGIA_FATTURA", "TNUMEROSEQUENZA", "TDATAEMISSIONEFATTURA", "TDATASCADENZAFATTURA", "TRAGIONESOCIALEMITTENTE", "TPARTITAIVAMITTENTE", "TINDIRIZZOMITTENTE", "TCAPMITTENTE", "TLOCALITAMITTENTE", "TPROVINCIAMITTENTE", "TNAZIONEMITTENTE", "TIBANMITTENTE", "TRAGIONESOCIALEDESTINATARIO", "TPARTITAIVADESTINATARIO", "TINDIRIZZODESTINATARIO", "TCAPDESTINATARIO", "TLOCALITADESTINATARIO", "TPROVINCIADESTINATARIO", "TNAZIONEDESTINATARIO", "TCONTRATTODISPACCIAMENTO", "FNUMEROFATTURA", "FPERIODOCOMPETENZADA", "FPERIODOCOMPETENZAA", "FCODICEVOCEFATTURATA", "FTOTALEIMPONIBILEFATTURA", "FTOTALEIVAFATTURA", "FTOTALEFATTURA", "FIMPORTOBOLLO", "NOTEFATTURA", "RTIPOLOGIACONTRATTUALE", "RCODICEMOTIVAZIONE", "RCORRINDEPREST", "RNUMEROPOD", "RTOTTARDISTQTFISSA", "RTOTTARDISTQTPOTENZA", "RTOTTARDISTENATTIVA", "RTOTTARDISTENREATTIVA", "RTOTONGENULTCOMQTFISSA", "RTOTONGENULTCOMQTPOTENZA", "RTOTONGENULTCOMENATTIVA", "RTOTALEQUOTAFISSA", "RTOTALEQUOTAPOTENZA", "RTOTALEENERGIAATTIVA", "RTOTALEENERGIAREATTIVA", "RTOTALEGENERALE", "RALIQUOTAIVA", "RIMPONIBILEIVA", "RIMPORTOIVA", "DCODICEPOD", "DDTTENSIONE", "DDTPOTENZAIMPEGNATA", "DDTPOTENZADISPONIBILE", "DDCTIPOLOGIACONTRATTUALE", "DDCTARIFFADISTRIBUZIONE", "DDCPRODUTTORIPURIPERIZIA", "DDCFORNITURAENERGIVORA", "DIDCALCOLO", "DDATICLIENTE", "DCOMPONENTE", "DCTSANNO", "DCTSPROGRESSIVO", "DPERIODOCOMPETENZADA", "DPERIODOCOMPETENZAA", "DSCAGLIONE", "DQUANTITA", "DCORRISPETTIVOUNITARIO", "DCODICEIVA", "DIMPORTO", "NOME_FILE") AS   
  SELECT  
TB_TESTATA_FLUSSO.TCodiceFlusso,  
TB_TESTATA_FLUSSO.TCodiceTipoFattura,  
CASE  
 WHEN TB_TESTATA_FLUSSO.TCodiceTipoFattura IN ('C', 'R') THEN 'TRASPORTO'  
 WHEN TB_TESTATA_FLUSSO.TCodiceTipoFattura = 'U'  THEN 'CONNESSIONE'  
 ELSE 'NON DEFINITO'  
END AS TIPOLOGIA_FATTURA,  
TB_TESTATA_FLUSSO.TNumeroSequenza,  
TB_TESTATA_FLUSSO.TDataEmissioneFattura,  
TB_TESTATA_FLUSSO.TDataScadenzaFattura,  
TB_TESTATA_FLUSSO.TRagioneSocialeMittente,  
TB_TESTATA_FLUSSO.TPartitaIVAMittente,  
TB_TESTATA_FLUSSO.TIndirizzoMittente,  
TB_TESTATA_FLUSSO.TCAPMittente,  
TB_TESTATA_FLUSSO.TLocalitaMittente,  
TB_TESTATA_FLUSSO.TProvinciaMittente,  
TB_TESTATA_FLUSSO.TNazioneMittente,  
TB_TESTATA_FLUSSO.TIBANMittente,  
TB_TESTATA_FLUSSO.TRagioneSocialeDestinatario,  
TB_TESTATA_FLUSSO.TPartitaIVADestinatario,  
TB_TESTATA_FLUSSO.TIndirizzoDestinatario,  
TB_TESTATA_FLUSSO.TCAPDestinatario,  
TB_TESTATA_FLUSSO.TLocalitaDestinatario,  
TB_TESTATA_FLUSSO.TProvinciaDestinatario,  
TB_TESTATA_FLUSSO.TNazioneDestinatario,  
TB_TESTATA_FLUSSO.TContrattoDispacciamento,  
--TB_TCodiceFlusso.TCodiceFlusso,  
TB_FATTURE.FNumeroFattura,  
TB_TESTATA_FATTURA.FPeriodoCompetenzaDa,  
TB_TESTATA_FATTURA.FPeriodoCompetenzaA,  
TB_TESTATA_FATTURA.FCodiceVoceFatturata,  
TO_NUMBER(REPLACE(TB_TESTATA_FATTURA.FTotaleImponibileFattura,'.',',')) AS FTotaleImponibileFattura,  
TO_NUMBER(REPLACE(TB_TESTATA_FATTURA.FTotaleIVAFattura,'.',',')) AS FTotaleIVAFattura,  
TO_NUMBER(REPLACE(TB_TESTATA_FATTURA.FTotaleFattura,'.',',')) AS FTotaleFattura,  
TO_NUMBER(REPLACE(TB_TESTATA_FATTURA.FImportoBollo,'.',',')) AS FImportoBollo,  
TB_RIEPILOGO_FATTURA.NoteFattura,  
TB_RIEPILOGO_VALORI.RTipologiaContrattuale,  
TB_RIEPILOGO_VALORI.RCodiceMotivazione,  
TB_RIEPILOGO_VALORI.RCorrIndePrest,  
TB_RIEPILOGO_VALORI.RNumeroPod,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotTarDistQtFissa,'.',',')) AS RTotTarDistQtFissa,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotTarDistQtPotenza,'.',',')) AS RTotTarDistQtPotenza,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotTarDistEnAttiva,'.',',')) AS RTotTarDistEnAttiva,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotTarDistEnReattiva,'.',',')) AS RTotTarDistEnReattiva,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotOnGenUltComQtFissa,'.',',')) AS RTotOnGenUltComQtFissa,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotOnGenUltComQtPotenza,'.',',')) AS RTotOnGenUltComQtPotenza,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotOnGenUltComEnAttiva,'.',',')) AS RTotOnGenUltComEnAttiva,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotaleQuotaFissa,'.',',')) AS RTotaleQuotaFissa,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotaleQuotaPotenza,'.',',')) AS RTotaleQuotaPotenza,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotaleEnergiaAttiva,'.',',')) AS RTotaleEnergiaAttiva,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotaleEnergiaReattiva,'.',',')) AS RTotaleEnergiaReattiva,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_VALORI.RTotaleGenerale,'.',',')) AS RTotaleGenerale,  
TB_RIEPILOGO_IVA.TB_RIEPILOGO_IVA.RAliquotaIVA,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_IVA.RImponibileIVA,'.',',')) AS RImponibileIVA,  
TO_NUMBER(REPLACE(TB_RIEPILOGO_IVA.RImportoIVA,'.',',')) AS RImportoIVA,  
TB_DETTAGLIO_POD.DCodicePod,  
TB_DATI_TECNICI_COMM.DDTTensione,  
TO_NUMBER(REPLACE(TB_DATI_TECNICI_COMM.DDTPotenzaImpegnata,'.',',')) AS DDTPotenzaImpegnata,  
TO_NUMBER(REPLACE(TB_DATI_TECNICI_COMM.DDTPotenzaDisponibile,'.',',')) AS DDTPotenzaDisponibile,  
TB_DATI_TECNICI_COMM.DDCTipologiaContrattuale,  
TB_DATI_TECNICI_COMM.DDCTariffaDistribuzione,  
TB_DATI_TECNICI_COMM.DDCProduttoriPuriPerizia,  
TB_DATI_TECNICI_COMM.DDCFornituraEnergivora,  
TB_CORRISPETTIVI.DIDCalcolo,  
TB_CORRISPETTIVI.DDatiCliente,  
TB_CORRISPETTIVI.DComponente,  
TB_CORRISPETTIVI.DCTSAnno,  
TB_CORRISPETTIVI.DCTSProgressivo,  
TB_CORRISPETTIVI.DPeriodoCompetenzaDa,  
TB_CORRISPETTIVI.DPeriodoCompetenzaA,  
TB_CORRISPETTIVI.DScaglione,  
TO_NUMBER(REPLACE(TB_CORRISPETTIVI.DQuantita,'.',',')) AS DQuantita,  
TO_NUMBER(REPLACE(TB_CORRISPETTIVI.DCorrispettivoUnitario,'.',',')) AS DCorrispettivoUnitario,  
TB_CORRISPETTIVI.DCodiceIVA,  
TO_NUMBER(REPLACE(TB_CORRISPETTIVI.DImporto,'.',',')) AS DImporto,  
MS525.NOME_FILE  
FROM MS525_FILE_XML MS525 LEFT JOIN  
XMLTABLE('FlussoFattureTrasporto'  
         PASSING MS525.XML_DATI  
         COLUMNS  
           TCodiceFlusso VARCHAR2(10) PATH 'TestataFlusso/TCodiceFlusso',  
           TCodiceTipoFattura VARCHAR2(10) PATH 'TestataFlusso/TCodiceTipoFattura',  
           TNumeroSequenza VARCHAR2(10) PATH 'TestataFlusso/TNumeroSequenza',  
           TDataEmissioneFattura VARCHAR2(10) PATH 'TestataFlusso/TDataEmissioneFattura',  
           TDataScadenzaFattura VARCHAR2(10) PATH 'TestataFlusso/TDataScadenzaFattura',  
           TRagioneSocialeMittente VARCHAR2(100) PATH 'TestataFlusso/TRagioneSocialeMittente',  
           TPartitaIVAMittente VARCHAR2(50) PATH 'TestataFlusso/TPartitaIVAMittente',  
           TIndirizzoMittente VARCHAR2(100) PATH 'TestataFlusso/TIndirizzoMittente',  
           TCAPMittente VARCHAR2(10) PATH 'TestataFlusso/TCAPMittente',  
           TLocalitaMittente VARCHAR2(100) PATH 'TestataFlusso/TLocalitaMittente',  
           TProvinciaMittente VARCHAR2(10) PATH 'TestataFlusso/TProvinciaMittente',  
           TNazioneMittente VARCHAR2(20) PATH 'TestataFlusso/TNazioneMittente',  
           TIBANMittente VARCHAR2(50) PATH 'TestataFlusso/TIBANMittente',  
           TRagioneSocialeDestinatario VARCHAR2(100) PATH 'TestataFlusso/TRagioneSocialeDestinatario',  
           TPartitaIVADestinatario VARCHAR2(50) PATH 'TestataFlusso/TPartitaIVADestinatario',  
           TIndirizzoDestinatario VARCHAR2(100) PATH 'TestataFlusso/TIndirizzoDestinatario',  
           TCAPDestinatario VARCHAR2(10) PATH 'TestataFlusso/TCAPDestinatario',  
           TLocalitaDestinatario VARCHAR2(100) PATH 'TestataFlusso/TLocalitaDestinatario',  
           TProvinciaDestinatario VARCHAR2(10) PATH 'TestataFlusso/TProvinciaDestinatario',  
           TNazioneDestinatario VARCHAR2(20) PATH 'TestataFlusso/TNazioneDestinatario',  
           TContrattoDispacciamento VARCHAR2(10) PATH 'TestataFlusso/TContrattoDispacciamento',  
           NODO_FLUSSO_FATT XMLTYPE path 'TestataFlusso',  
           NODO_FATTURE  XMLTYPE path 'Fatture') TB_TESTATA_FLUSSO ON 1=1 LEFT JOIN  
XMLTABLE('/TestataFlusso'  
         PASSING TB_TESTATA_FLUSSO.NODO_FLUSSO_FATT  
         COLUMNS  
           TCodiceFlusso VARCHAR2(20) PATH 'TCodiceFlusso'  
           ) TB_TCodiceFlusso ON 1=1 LEFT JOIN  
XMLTABLE('/Fatture'  
         PASSING TB_TESTATA_FLUSSO.NODO_FATTURE  
         COLUMNS  
           FNumeroFattura VARCHAR2(20) PATH 'FNumeroFattura',  
           NODO_TESTATA_FATT XMLTYPE PATH 'TestataFattura',  
           NODO_RIEPILOGO_FATT XMLTYPE PATH 'RiepilogoFattura',  
           NODO_DETTAGLIO_POD XMLTYPE PATH 'DettaglioPOD'  
           ) TB_FATTURE ON 1=1 LEFT JOIN  
XMLTABLE('/TestataFattura'  
         PASSING TB_FATTURE.NODO_TESTATA_FATT  
         COLUMNS  
           FPeriodoCompetenzaDa VARCHAR2(20) PATH 'FPeriodoCompetenzaDa',  
           FPeriodoCompetenzaA VARCHAR2(20) PATH 'FPeriodoCompetenzaA',  
  FCodiceVoceFatturata VARCHAR2(20) PATH 'FCodiceVoceFatturata',  
           FTotaleImponibileFattura VARCHAR2(20) PATH 'FTotaleImponibileFattura',  
           FTotaleIVAFattura VARCHAR2(20) PATH 'FTotaleIVAFattura',  
           FTotaleFattura VARCHAR2(20) PATH 'FTotaleFattura',  
  FImportoBollo VARCHAR2(20) PATH 'FImportoBollo'  
           ) TB_TESTATA_FATTURA ON 1=1 LEFT JOIN  
/*  
--Modificata con loop perche' il tag <NoteFattura> puo' comparire piu' di una volta!!!  
XMLTABLE('/RiepilogoFattura'  
         PASSING TB_FATTURE.NODO_RIEPILOGO_FATT  
         COLUMNS  
           NoteFattura VARCHAR2(1000) PATH 'NoteFattura',  
           NODO_RIEPILOGO_VALORI XMLTYPE PATH 'RiepilogoValori',  
           NODO_RIEPILOGO_IVA XMLTYPE PATH 'RiepilogoIVA'  
           ) TB_RIEPILOGO_FATTURA ON 1=1 LEFT JOIN  
*/  
XMLTABLE('for $i in $XTYPE_NODO_RIEPILOGO_FATT/RiepilogoFattura  
              return element result {  
                for $j at $pos in $i  
                  return element row {  
                     $i/NoteFattura[$pos],  
                     $i/RiepilogoValori,  
                     $i/RiepilogoIVA  
                     }  
                }/row  
             '  
            PASSING TB_FATTURE.NODO_RIEPILOGO_FATT as XTYPE_NODO_RIEPILOGO_FATT  
             COLUMNS  
              NoteFattura VARCHAR2(1000) PATH 'NoteFattura',  
              NODO_RIEPILOGO_VALORI XMLTYPE PATH 'RiepilogoValori',  
              NODO_RIEPILOGO_IVA XMLTYPE PATH 'RiepilogoIVA'  
) TB_RIEPILOGO_FATTURA ON 1=1 LEFT JOIN  
XMLTABLE('/RiepilogoValori'  
         PASSING TB_RIEPILOGO_FATTURA.NODO_RIEPILOGO_VALORI  
         COLUMNS  
           RTipologiaContrattuale VARCHAR2(20) PATH 'RTipologiaContrattuale',  
  RCodiceMotivazione VARCHAR2(20) PATH 'RCodiceMotivazione',  
  RCorrIndePrest VARCHAR2(20) PATH 'RCorrIndePrest',  
           RNumeroPod VARCHAR2(20) PATH 'RNumeroPod',  
           RTotTarDistQtFissa VARCHAR2(20) PATH 'RTotTarDistQtFissa',  
           RTotTarDistQtPotenza VARCHAR2(20) PATH 'RTotTarDistQtPotenza',  
           RTotTarDistEnAttiva VARCHAR2(20) PATH 'RTotTarDistEnAttiva',  
           RTotTarDistEnReattiva VARCHAR2(20) PATH 'RTotTarDistEnReattiva',  
           RTotOnGenUltComQtFissa VARCHAR2(20) PATH 'RTotOnGenUltComQtFissa',  
           RTotOnGenUltComQtPotenza VARCHAR2(20) PATH 'RTotOnGenUltComQtPotenza',  
           RTotOnGenUltComEnAttiva VARCHAR2(20) PATH 'RTotOnGenUltComEnAttiva',  
           RTotaleQuotaFissa VARCHAR2(20) PATH 'RTotaleQuotaFissa',  
           RTotaleQuotaPotenza VARCHAR2(20) PATH 'RTotaleQuotaPotenza',  
           RTotaleEnergiaAttiva VARCHAR2(20) PATH 'RTotaleEnergiaAttiva',  
           RTotaleEnergiaReattiva VARCHAR2(20) PATH 'RTotaleEnergiaReattiva',  
           RTotaleGenerale VARCHAR2(20) PATH 'RTotaleGenerale'  
           ) TB_RIEPILOGO_VALORI ON 1=1 LEFT JOIN  
XMLTABLE('/RiepilogoIVA'  
         PASSING TB_RIEPILOGO_FATTURA.NODO_RIEPILOGO_IVA  
         COLUMNS  
           RAliquotaIVA VARCHAR2(5) PATH 'RAliquotaIVA',  
           RImponibileIVA VARCHAR2(20) PATH 'RImponibileIVA',  
           RImportoIVA VARCHAR2(20) PATH 'RImportoIVA'  
           ) TB_RIEPILOGO_IVA ON 1=1 LEFT JOIN  
XMLTABLE('/DettaglioPOD'  
         PASSING TB_FATTURE.NODO_DETTAGLIO_POD  
         COLUMNS  
           DCodicePod VARCHAR2(1000) PATH 'DCodicePod',  
           DATI_TECNICI_COMMERCIALI XMLTYPE PATH 'DatiTecniciCommerciali',  
           CORRISPETTIVI XMLTYPE PATH 'Corrispettivi'  
           ) TB_DETTAGLIO_POD ON 1=1 LEFT JOIN  
XMLTABLE('/DatiTecniciCommerciali'  
         PASSING TB_DETTAGLIO_POD.DATI_TECNICI_COMMERCIALI  
         COLUMNS  
           DDTTensione VARCHAR2(1000) PATH 'DDTTensione',  
           DDTPotenzaImpegnata VARCHAR2(20) PATH 'DDTPotenzaImpegnata',  
           DDTPotenzaDisponibile VARCHAR2(20) PATH 'DDTPotenzaDisponibile',  
           DDCTipologiaContrattuale VARCHAR2(20) PATH 'DDCTipologiaContrattuale',  
           DDCTariffaDistribuzione VARCHAR2(10) PATH 'DDCTariffaDistribuzione',  
           DDCProduttoriPuriPerizia VARCHAR2(10) PATH 'DDCProduttoriPuriPerizia',  
           DDCFornituraEnergivora VARCHAR2(10) PATH 'DDCFornituraEnergivora'  
           ) TB_DATI_TECNICI_COMM ON 1=1 LEFT JOIN  
XMLTABLE('/Corrispettivi'  
         PASSING TB_DETTAGLIO_POD.CORRISPETTIVI  
         COLUMNS  
          DIDCalcolo VARCHAR2(20) PATH 'DIDCalcolo',  
 DDatiCliente VARCHAR2(20) PATH 'DDatiCliente',  
          DComponente VARCHAR2(20) PATH 'DComponente',  
 DCTSAnno VARCHAR2(20) PATH 'DCTSAnno',  
 DCTSProgressivo VARCHAR2(20) PATH 'DCTSProgressivo',  
          DPeriodoCompetenzaDa VARCHAR2(10) PATH 'DPeriodoCompetenzaDa',  
          DPeriodoCompetenzaA VARCHAR2(10) PATH 'DPeriodoCompetenzaA',  
          DScaglione VARCHAR2(10) PATH 'DScaglione',  
          DQuantita VARCHAR2(10) PATH 'DQuantita',  
          DCorrispettivoUnitario VARCHAR2(10) PATH 'DCorrispettivoUnitario',  
          DCodiceIVA VARCHAR2(10) PATH 'DCodiceIVA',  
          DImporto VARCHAR2(20) PATH 'DImporto'  
           ) TB_CORRISPETTIVI ON 1=1;  

在10 MB的文件上,Viwe需要两个多小时才能返回记录集。 这是MS525_FILE_XML表的DDL:

CREATE TABLE MS525_FILE_XML   
 ( NOME_FILE VARCHAR2(200 BYTE),   
    XML_DATI XMLTYPE,   
    ESITO_OPERAZIONE NUMBER(*,0) DEFAULT 0,   
    DATA_ORA_INSERT TIMESTAMP (6) DEFAULT SYSTIMESTAMP,   
    FLAG_IN_ESECUZIONE NUMBER(*,0) DEFAULT 0,   
 CONSTRAINT PK_MS525 PRIMARY KEY (NOME_FILE, DATA_ORA_INSERT)  
 );  

这是执行计划:

Plan hash value: 2500968592
----------------------------------------------------------------------------------------------------------------------
| Id  | Operation                                   | Name                   | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT                            |                        |    18E|    15E|    18E  (0)|999:59:59 |
|   1 |  SORT AGGREGATE                             |                        |     1 |     4 |            |          |
|*  2 |   COLLECTION ITERATOR PICKLER FETCH         | XMLSEQUENCEFROMXMLTYPE |    82 |   328 |    30   (4)| 00:00:01 |
|   3 |  SORT AGGREGATE                             |                        |     1 |     2 |            |          |
|   4 |   COLLECTION ITERATOR PICKLER FETCH         | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|   5 |  NESTED LOOPS OUTER                         |                        |    18E|    15E|    18E  (0)|999:59:59 |
|   6 |   NESTED LOOPS OUTER                        |                        |    18E|    15E|    18E  (0)|999:59:59 |
|   7 |    NESTED LOOPS OUTER                       |                        |  2425P|    15E|  8681T  (1)|999:59:59 |
|   8 |     NESTED LOOPS OUTER                      |                        |   296T|   961P|  1062G  (1)|999:59:59 |
|   9 |      NESTED LOOPS OUTER                     |                        |    36G|   119T|   130M  (1)|433:45:23 |
|  10 |       NESTED LOOPS OUTER                    |                        |  4451K|    14G| 16021   (1)| 00:03:13 |
|  11 |        NESTED LOOPS OUTER                   |                        |   545 |  1520K|    90   (2)| 00:00:02 |
|  12 |         NESTED LOOPS OUTER                  |                        |     1 |  2773 |    60   (0)| 00:00:01 |
|  13 |          NESTED LOOPS OUTER                 |                        |     1 |  2659 |    31   (0)| 00:00:01 |
|  14 |           NESTED LOOPS OUTER                |                        |     1 |  2659 |     2   (0)| 00:00:01 |
|  15 |            TABLE ACCESS BY INDEX ROWID      | MS525_FILE_XML         |     1 |  2104 |     0   (0)| 00:00:01 |
|* 16 |             INDEX RANGE SCAN                | PK_MS525               |     1 |       |     0   (0)| 00:00:01 |
|  17 |            VIEW                             |                        |     1 |   555 |     2   (0)| 00:00:01 |
|* 18 |             FILTER                          |                        |       |       |            |          |
|  19 |              FAST DUAL                      |                        |     1 |       |     2   (0)| 00:00:01 |
|  20 |           VIEW                              |                        |  8168 |       |    29   (0)| 00:00:01 |
|  21 |            COLLECTION ITERATOR PICKLER FETCH| XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  22 |          VIEW                               |                        |  8168 |   909K|    29   (0)| 00:00:01 |
|  23 |           COLLECTION ITERATOR PICKLER FETCH | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  24 |         VIEW                                |                        |  8168 |   670K|    29   (0)| 00:00:01 |
|  25 |          COLLECTION ITERATOR PICKLER FETCH  | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  26 |        VIEW                                 |                        |  8168 |  4546K|    29   (0)| 00:00:01 |
|  27 |         COLLECTION ITERATOR PICKLER FETCH   | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  28 |       VIEW                                  |                        |  8168 |  1531K|    29   (0)| 00:00:01 |
|  29 |        COLLECTION ITERATOR PICKLER FETCH    | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  30 |      VIEW                                   |                        |  8168 |   223K|    29   (0)| 00:00:01 |
|  31 |       COLLECTION ITERATOR PICKLER FETCH     | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  32 |     VIEW                                    |                        |  8168 |  4546K|    29   (0)| 00:00:01 |
|  33 |      COLLECTION ITERATOR PICKLER FETCH      | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  34 |    VIEW                                     |                        |  8168 |  4458K|    29   (0)| 00:00:01 |
|  35 |     COLLECTION ITERATOR PICKLER FETCH       | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
|  36 |   VIEW                                      |                        |  8168 |   909K|    29   (0)| 00:00:01 |
|  37 |    COLLECTION ITERATOR PICKLER FETCH        | XMLSEQUENCEFROMXMLTYPE |  8168 | 16336 |    29   (0)| 00:00:01 |
----------------------------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter(SYS_XQFNPREDTRUTH(:B1,VALUE(KOKBF$) /* KOKBI$ */ )=1)
  16 - access("MS525"."NOME_FILE"='05779711000_02968430237_DP0114_FTR_C_20170803_001_E.xml')
  18 - filter(EXISTSNODE(SYS_MAKEXML(0,"MS525"."SYS_NC00003$"),'/FlussoFattureTrasporto')=1)

我找到了解决方案(但是我不知道为什么会这样); 如果我更换

XMLTABLE('for $i in $XTYPE_NODO_RIEPILOGO_FATT/RiepilogoFattura  
              return element result {  
                for $j at $pos in $i  
                  return element row {  
                    $i/NoteFattura[$pos],  
                    $i/RiepilogoValori,  
                    $i/RiepilogoIVA  
                    }  
                }/row  
            '  
            PASSING TB_FATTURE.NODO_RIEPILOGO_FATT as XTYPE_NODO_RIEPILOGO_FATT  
            COLUMNS  
              NoteFattura VARCHAR2(1000) PATH 'NoteFattura',  
              NODO_RIEPILOGO_VALORI XMLTYPE PATH 'RiepilogoValori',  
              NODO_RIEPILOGO_IVA XMLTYPE PATH 'RiepilogoIVA'  
) TB_RIEPILOGO_FATTURA ON 1=1 LEFT JOIN  

XMLTABLE('/RiepilogoFattura'  
         PASSING TB_FATTURE.NODO_RIEPILOGO_FATT  
         COLUMNS  
           NoteFattura VARCHAR2(1000) PATH 'NoteFattura',  
           NODO_RIEPILOGO_VALORI XMLTYPE PATH 'RiepilogoValori',  
           NODO_RIEPILOGO_IVA XMLTYPE PATH 'RiepilogoIVA'  
           ) TB_RIEPILOGO_FATTURA ON 1=1 LEFT JOIN  

无需花费n次字段(但只有一个),查询将在30秒内运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM