Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Valor do parâmetro de passagem do Oracle XMLQuery


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.