Como XMLQuery envolve trabalho com sequências de caracteres, dá para usar para vários problemas, inclusive para fazer alguns tipos de parse como você sugeriu.
Por exemplo, vamos supor que temos a string
'10,60,30,300,1000'
e que precisamos somar as partes dela, entre vírgulas.
Uma forma seria usando expressões regulares, buscando por elementos entre vírgulas, ou com regexp_substr ou regexp_replace para isolá-los.
Isso envolveria iteração (loop), o que infelizmente é meio complicado de fazer em SQL, pois envolve ou queries hierárquicas (com Connect By) ou cláusula model. Ou para quem tem 11g a nova cláusula With recursiva.
De qualquer forma, são sintaxes e códigos um tanto complexos.
Dá para fazer a mesma coisa com XQuery e XMLTable, com um código bem limpo. Por exemplo:
Selecionar tudo
SQL> WITH t AS
2 (SELECT '10,60,30,300,1000' str FROM dual)
3 -- select xmltype('<e><e>' || REPLACE(str, ',', '</e><e>') || '</e></e>') from t
4 -- fim dos dados de exemplo
5 SELECT sum(extractvalue(column_value, 'e')) sum_val
6 FROM t, xmltable('/e' passing xmltype('<e><e>' || REPLACE(str, ',', '</e><e>') || '</e></e>').extract('e/e'));
SUM_VAL
----------
1400
Em duas linhas se resolve o problema.
A ideia que pensei foi substituir os asteriscos (
*) com tags xml, semelhante ao que você sugeriu, e parseá-las colocando o interior com upper.