Problemem jest konkatenacja ciągów w XPath. Nie podoba ci się, że robisz ... AR_ITEMS['||lp||']/ITEMS ...
.
Możesz przekazać wartość swojego lp
PL/SQL zmienna przez passing
klauzula, która dopuszcza wiele argumentów oddzielonych przecinkami; nadaj mu identyfikator, a następnie odwołaj się do niego bezpośrednio w XPath. Utknąłem używany "lp"
i $lp
; nie muszą pasować do nazwy zmiennej PL/SQL, ale może być jaśniejsze, jeśli tak.
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,
Zmienna indeksu pętli PL/SQL lp
jest pls_integer
których nie podoba się klauzula przekazująca; jeśli zdasz to bezpośrednio, otrzymasz ORA-00932, więc musisz przesłać go do typu danych liczbowych.