Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle XMLQuery passant la valeur du paramètre

Le problème est la concaténation de chaînes dans le XPath. Il n'aime pas que vous fassiez ... AR_ITEMS['||lp||']/ITEMS ... .

Vous pouvez passer la valeur de votre lp PL/SQL variable à travers le passing clause, qui autorise plusieurs arguments séparés par des virgules ; donnez-lui un identifiant, puis faites-y référence directement dans le XPath. J'ai utilisé "lp" et $lp; ils ne doivent pas nécessairement correspondre au nom de la variable PL/SQL, mais cela pourrait être plus clair s'ils le font.

      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 d'index de boucle PL/SQL lp est un pls_integer ce que la clause de passage n'aime pas ; si vous le transmettez directement, vous obtenez ORA-00932, vous devez donc le convertir en type de données numérique.