sql >> Base de Datos >  >> RDS >> Oracle

Oracle XMLQuery pasando el valor del parámetro

El problema es la concatenación de cadenas en XPath. No le gusta que hagas ... AR_ITEMS['||lp||']/ITEMS ... .

Puede pasar el valor de su PL/SQL lp variable a través del passing cláusula, que permite múltiples argumentos separados por comas; asígnele un identificador y luego refiérase a eso directamente en el XPath. He atascado usado "lp" y $lp; no tienen que coincidir con el nombre de la variable PL/SQL, pero podría ser más claro si lo hacen.

      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 variable de índice de bucle PL/SQL lp es un pls_integer que no le gusta a la cláusula de paso; si pasa eso directamente, obtiene ORA-00932, por lo que debe convertirlo al tipo de datos de número.