O problema é a concatenação de strings no XPath. Não gosta que você faça
... AR_ITEMS['||lp||']/ITEMS ...
. Você pode passar o valor do seu PL/SQL
lp
variável através da passing
cláusula, que permite vários argumentos separados por vírgulas; dê a ele um identificador e, em seguida, faça referência a ele diretamente no XPath. Eu usei "lp"
e $lp
; eles não precisam corresponder ao nome da variável PL/SQL, mas pode ficar mais claro se corresponderem. 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,
A variável de índice de loop PL/SQL
lp
é um pls_integer
que a cláusula de passagem não gosta; se você passar isso diretamente, obterá ORA-00932, então você precisa convertê-lo para o tipo de dados number.