Problemet er strengsammenkædningen i XPath. Det kan ikke lide, at du laver ... AR_ITEMS['||lp||']/ITEMS ...
.
Du kan videregive værdien af din PL/SQL lp
variabel ind gennem passing
klausul, som tillader flere kommaseparerede argumenter; giv den en identifikator og henvis derefter til den direkte i XPath. Jeg har brugt "lp"
og $lp
; de behøver ikke at matche PL/SQL-variabelnavnet, men det kan være tydeligere, hvis de gør det.
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,
PL/SQL-løkkeindeksvariablen lp
er et pls_integer
som passeringssætningen ikke kan lide; hvis du sender det direkte, får du ORA-00932, så du skal caste det til nummerdatatypen.