Проблемът е конкатенацията на низове в XPath. Не му харесва да правиш ... AR_ITEMS['||lp||']/ITEMS ...
.
Можете да подадете стойността на вашия PL/SQL lp
променлива чрез passing
клауза, която позволява множество аргументи, разделени със запетая; дайте му идентификатор и след това се обърнете към него директно в XPath. Останах да използвам "lp"
и $lp
; те не трябва да съвпадат с името на променливата в PL/SQL, но може да е по-ясно, ако го направят.
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 цикъл lp
е pls_integer
което преминаващата клауза не харесва; ако подадете това директно, получавате ORA-00932, така че трябва да го прехвърлите към числовия тип данни.