Por favor, preciso pegar de dentro de uma string um valor especifico de um "label". Exemplo, para o label "Documento", teria que pegar o respectivo valor do mesmo.
Para isso criei o seguinte bloco anonimo para testes:
declare
v_string varchar2(255) := '"Estado" : "São Paulo", "Nome" : "MARIO", "Documento" : "27439076818", "Pais" : "Brasil"';
v_label varchar2(50);
v_texto varchar2(11);
v_cpf number;
v_digito number;
begin
v_label := '"Documento" : "';
select trim(substr( replace(substr(v_string,instr(v_string,v_label) + instr( substr(v_string,instr(v_string,v_label)),'"',1,3)),'"','')
,1,instr(replace(substr(v_string,instr(v_string,v_label) + instr( substr(v_string,instr(v_string,v_label)),'"',1,3)),'"',''),',',1,1)-1))
into v_texto
from dual;
select substr(v_texto,1,9) as cpf
,decode(length(v_texto),11,substr(v_texto,-2,length(v_texto))) as digito
into v_cpf, v_digito
from dual;
-- tenho que separar o digito porque serão inseridos em colunas separadas
dbms_output.put_line(v_cpf || v_digito);
-- insert...
end;
Obs.: Apenas para citar o valor desta string é um retorno JSON. Não sei se existe alguma função especifica para tratar strings neste formato.
Grato.