Das Problem ist die Zeichenfolgenverkettung im XPath. Es mag nicht, dass du ... AR_ITEMS['||lp||']/ITEMS ...
machst .
Sie können den Wert Ihres PL/SQL lp
übergeben Variable in durch die passing
-Klausel, die mehrere durch Kommas getrennte Argumente zulässt; Geben Sie ihm einen Bezeichner und verweisen Sie dann direkt im XPath darauf. Ich habe "lp"
verwendet und $lp
; sie müssen nicht mit dem PL/SQL-Variablennamen übereinstimmen, aber es könnte klarer sein, wenn sie es tun.
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,
Die Indexvariable lp
der PL/SQL-Schleife ist ein pls_integer
die die Passing-Klausel nicht mag; Wenn Sie das direkt übergeben, erhalten Sie ORA-00932, also müssen Sie es in den Zahlendatentyp umwandeln.