Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle XMLQuery che passa il valore del parametro

Il problema è la concatenazione di stringhe nell'XPath. Non ti piace fare ... AR_ITEMS['||lp||']/ITEMS ... .

Puoi passare il valore del tuo PL/SQL lp variabile attraverso il passing clausola, che consente più argomenti separati da virgole; dargli un identificatore e quindi fare riferimento a quello direttamente in XPath. Ho bloccato usato "lp" e $lp; non devono corrispondere al nome della variabile PL/SQL, ma potrebbe essere più chiaro se lo fanno.

      XMLQuery('for $i in distinct-values(/invoice/AR_ITEMS[$lp]/ITEMS/EVENTS/BAL_IMPACTS/DISCOUNT_INFO)
                where $i = "Plan499 Corp Disc" 
                or $i = "Plan899 Corp Disc" 
                or $i = "Plan1099 Corp Disc" 
                or $i = "Plan1599 Corp Disc"
                return $i' passing original_xmldoc, cast(lp as number) as "lp" returning content ).getStringVal() sys_descr,

La variabile dell'indice del ciclo PL/SQL lp è un pls_integer che non piace alla clausola passeggera; se lo passi direttamente ottieni ORA-00932, quindi devi trasmetterlo al tipo di dati del numero.