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.