Ora-19025

Ora-19025
  • 17
    Lug

Ora-19025

twittergoogle_pluslinkedin

Quando lavori con xml file potresti trovarti a risolvere lo scenario in cui nodo contiene altri nodi
Nel nostro caso stiamo parlando dei nodi seguenti () ; () .
E’ abbastanza delicate trovare un approccio che ti di al risultato aspettato, i problemi che si possono incontrare sono due diversi tra loro:
– Records duplicati
– Estrazione di uno nodo restituisce più di un valore

Lo scenario che andiamo ad analizzare è il seguente descritto dall’immagine sottostante:

La duplicazione del record significa estrazione di informazioni che non sono incluse nel nodo interessato come i record evidenziati in rosso.
Controllare lo script duplicateRow.sql per meglio comprendere l’errore analitico:

– OrgnlRcrdId|Sts: 20170224MICMTSCINS871|RJCT
– TEMP:INS-105;It contains an invalid code
– TEMP:INS-106;The field is not registered at the system
– TEMP:INS-111;The field is not registered at the sub system
– TEMP:INS-107;thusday
– TEMP:INS-187;monday
– TEMP:INS-000;017.001.01

In apparenza non ci sono errori tecnici ma controllando i dati estratti l’interrogazione estrae piu’ informazioni del dovuto.

L’altro errore prodotto è dato dal seguente sqlerrm:
ORA-19025: EXTRACTVALUE returns value of only one node
Esso è generato quando cerchiamo di estrarre le informazioni contenute al seguente path VldtnRule/Id, per replicare l’errore e meglio comprendere il caso è interessante far girare lo script sottostante:
ORA-19025 EXTRACTVALUE returns value of only one node.sql

Per risolvere l’errore evidenziato bisogna gestire il sotto nodo ( ) come un nuovo xml da ciclare, sono in questo modo è possibile estrarre I suoi relative sotto attributi, per fare questo il nuovo nodo dovrà essere trasformare in una tabella di tipo xml
Per implementare la soluzione il nostro caso cambia nel seguente modo:

    i. VldtnRule XMLTYPE PATH ‘VldtnRule’
    ii. XMLTABLE(
    ‘VldtnRule’
    PASSING q.VldtnRule
    COLUMNS Idd VARCHAR2(30) path ‘./Id’,
    Descc VARCHAR2(100) path ‘./Desc’ )
    iii. LEFT JOIN XMLTABLE(
    ‘VldtnRule’
    PASSING q.VldtnRule
    COLUMNS Idd VARCHAR2(30) path ‘./Id’,
    Descc VARCHAR2(100) path ‘./Desc’ ) v
    ON (1=1)

Seguire le istruzioni nello script sottostante per avere la panoramica completa della risoluzione dell’errore dell’ultimo punto:
scarica lo scipt tosolveORA-19025.sql