Vấn đề là nối chuỗi trong XPath. Nó không thích bạn làm ... AR_ITEMS['||lp||']/ITEMS ...
.
Bạn có thể chuyển giá trị của lp
PL / SQL của mình biến vào thông qua passing
mệnh đề cho phép nhiều đối số được phân tách bằng dấu phẩy; cung cấp cho nó một số nhận dạng và sau đó tham chiếu trực tiếp đến nó trong XPath. Tôi đã sử dụng "lp"
và $lp
; chúng không nhất thiết phải khớp với tên biến PL / SQL, nhưng có thể rõ ràng hơn nếu chúng làm như vậy.
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,
Biến chỉ mục vòng lặp PL / SQL lp
là một pls_integer
mà mệnh đề đi qua không thích; nếu bạn chuyển trực tiếp, bạn sẽ nhận được ORA-00932, vì vậy bạn cần truyền nó sang kiểu dữ liệu số.