I 11g, Sandsynligvis noget lignende-
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;
Eller i henhold til din '1'||
trick-
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;
Desværre i 10g, XMLQuery
kan ikke acceptere funktioner og forventer altid en streng bogstavelig til evaluering for eksempel-
select XMLQuery('1*0.25' RETURNING CONTENT).getnumberval() as val
from dual;
virker og returnerer 0.25
, men
select XMLQuery(substr('*1*0.25',2) RETURNING CONTENT).getnumberval() as val
from dual;
giver ORA-19102: XQuery string literal expected
.
Forespørgslen kan blive langsommere, efterhånden som antallet af niveauer i et træ stiger med en ekstra overhead af intern træoprettelse af XMLQuery
sig selv. Den mest optimale metode til at opnå resultatet ville stadig være en PL/SQL-funktion, som i øvrigt ville fungere både i 10g og 11g.