Trong 11g, có lẽ là một cái gì đó giống như-
SELECT a.*, LEVEL AS lvl
,XMLQuery( substr( sys_connect_by_path( percent_owned, '*' ), 2 ) RETURNING CONTENT).getnumberval() AS calc
FROM hierarchy_test a
START WITH id = 1
CONNECT BY nocycle PRIOR parent_id = id;
Hoặc, theo '1'||
của bạn lừa-
SELECT a.*, LEVEL AS lvl
, XMLQuery( ('1'|| sys_connect_by_path( percent_owned, '*' )) RETURNING CONTENT).getnumberval() AS calc
FROM hierarchy_test a
START WITH id = 1
CONNECT BY nocycle PRIOR parent_id = id;
Thật không may trong 10g, XMLQuery
không thể chấp nhận các hàm và luôn mong đợi một chuỗi ký tự để đánh giá chẳng hạn-
select XMLQuery('1*0.25' RETURNING CONTENT).getnumberval() as val
from dual;
hoạt động và trả về 0.25
, nhưng
select XMLQuery(substr('*1*0.25',2) RETURNING CONTENT).getnumberval() as val
from dual;
cung cấp cho ORA-19102: XQuery string literal expected
.
Truy vấn có thể chậm hơn khi số lượng cấp trên cây tăng lên khi tạo thêm chi phí tạo cây nội bộ bằng XMLQuery
chính nó. Phương pháp tối ưu nhất để đạt được kết quả vẫn sẽ là Hàm PL / SQL mà theo cách này sẽ hoạt động cả trong 10g và 11g.