Função - Retorna parte de um campo de texto/clob definindo inicio e fim
SQL:
create or replace function retorna_parte (xtexto in clob, xdesde in varchar2, xate in varchar2, xcont in integer) return varchar2 is
info varchar2(2000);
begin
select trim(substr(xtexto, instr(xtexto, xdesde, 1, xcont)+length(xdesde), instr(xtexto, xate, instr(xtexto, xdesde, 1, xcont)+length(xdesde)) - (instr(xtexto, xdesde, 1, xcont)+length(xdesde))))
into info from dual;
return info;
end;
Chamada da função:
select retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<nome>', '</', 1) as nome,
retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<dtnascimento>', '</', 1) as dtnascimento,
retorna_parte('<nome>João da Silva</nome><dtnascimento>30/03/1990</dtnascimento><profissao>Consultor DOX</profissao>', '<profissao>', '</', 1) as profissao
from dual
Retorno:
| NOME | DATA | PROFISSAO |
----------------------------------------------
| João da Silva | 30/03/1990 | Consultor DOX |