Het probleem is de aaneenschakeling van strings in de XPath. Het houdt er niet van dat je ... AR_ITEMS['||lp||']/ITEMS ...
doet .
U kunt de waarde van uw PL/SQL lp
doorgeven variabele in via de passing
clausule, die meerdere door komma's gescheiden argumenten toestaat; geef het een identifier en verwijs daar dan rechtstreeks naar in de XPath. Ik heb de gebruikte "lp"
gebruikt en $lp
; ze hoeven niet overeen te komen met de naam van de PL/SQL-variabele, maar het is misschien duidelijker als ze dat wel doen.
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,
De PL/SQL-lusindexvariabele lp
is een pls_integer
waar de passerende clausule niet van houdt; als je dat direct doorgeeft, krijg je ORA-00932, dus je moet het casten naar het datatype nummer.