Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle XMLQuery-Übergabeparameterwert

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.