Dalam 11g, Mungkin seperti-
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;
Atau, sesuai '1'||
. Anda trik-
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;
Sayangnya dalam 10g, XMLQuery
tidak dapat menerima fungsi dan selalu mengharapkan literal string untuk evaluasi misalnya-
select XMLQuery('1*0.25' RETURNING CONTENT).getnumberval() as val
from dual;
berfungsi dan mengembalikan 0.25
, tapi
select XMLQuery(substr('*1*0.25',2) RETURNING CONTENT).getnumberval() as val
from dual;
memberikan ORA-19102: XQuery string literal expected
.
Kueri mungkin menjadi lebih lambat karena jumlah level pada pohon meningkat dengan tambahan overhead pembuatan pohon internal oleh XMLQuery
diri. Metode yang paling optimal untuk mencapai hasil tetap adalah Fungsi PL/SQL yang akan bekerja baik dalam 10g dan 11g.