In 11g, waarschijnlijk zoiets als-
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;
Of, volgens uw '1'||
truc-
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;
Helaas in 10g, XMLQuery
kan geen functies accepteren en verwacht altijd een letterlijke tekenreeks voor bijvoorbeeld evaluatie-
select XMLQuery('1*0.25' RETURNING CONTENT).getnumberval() as val
from dual;
werkt en retourneert 0.25
, maar
select XMLQuery(substr('*1*0.25',2) RETURNING CONTENT).getnumberval() as val
from dual;
geeft ORA-19102: XQuery string literal expected
.
De query kan langzamer worden naarmate het aantal niveaus in een boomstructuur toeneemt met extra overhead voor het maken van een interne boomstructuur door XMLQuery
zelf. De meest optimale methode om het resultaat te bereiken zou nog steeds een PL/SQL-functie zijn die trouwens zowel in 10g als 11g zou werken.