ORA-06502 character string buffer too small numérico ou de valor
na seguinte query, estou tendo um erro em uma determinado dia que nunca ocorreu: ORA-06502 character string buffer too small numérico ou de valor.
Fiz de tudo pra resolver. tentei converter a informação usnado convert, tentei to_char, mas nada funciona... Alguém consegue me ajudar?
Fiz de tudo pra resolver. tentei converter a informação usnado convert, tentei to_char, mas nada funciona... Alguém consegue me ajudar?
select pac_reg Registro
,pac_nome Paciente ,checkcir.rcl_dthr, checkcir.rcl_txt
,replace(smart.f_resultado_rcl_2(relcir.rcl_laudo_tratado, 21156, 12), ''?'') Data_Cirurgia
,replace(replace(smart.f_resultado_rcl_2(relcir.rcl_laudo_tratado, 21155, 39), ''?''), ''Potencialmente conta'', ''Pontencialmente contaminada'') Potencial_Contaminação
,nvl(psv_nome, rcl_e_nome) Cirurgião
,ctf_nome Classe_Técnica_Proc_Principal
,esp_nome Especialidade_cirurgião
,smk_nome Procedimento_Principal
,decode(rcl_c_via_acesso, ''P'', ''Principal''
, ''N'', ''Outra via'') Via_de_acesso
,replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28803, 07), ''?'') Anestesista
,replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 26), ''?'') Ini_cir_timeout
,replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28806, 33), ''?'') Fim_cir_timeout
,replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 09), ''?'') Antibiótico_profilático
,case
when replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 09), ''?'') = ''Sim'' then
replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 13), ''?'')
end Qual_is
/*erro nesta coluna*/
,convert(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 14), ''US7ASCII'', ''WE8ISO8859P1'')
,case
when replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 09), ''?'') = ''Sim'' then
replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 14), ''?'')
end Horário_1a_dose
,case
when replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 09), ''?'') = ''Sim'' then
replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 15), ''?'')
end Horário_2a_dose
,(select max(ism.ism_data_aplicacao)
from ism
,sma
,bul
,bpt
where ism_sma_serie = sma_serie
and ism_sma_num = sma_num
and bul_mat_cod = ism_mat_cod
and bpt_bul_med = bul_med
and bpt_pat_cod in (''AMS'',
''CFZ'',
''CZL'')
and ism_qtde_baixa > 0
and sma_pac_reg = relcir.rcl_pac
and sma_hsp_num = relcir.rcl_hsp
and (ism_data_aplicacao - relcir.rcl_dthr) between 0 and 5) Últ_dose_Cefazoilna_Ampicilina
,(select max(ism.ism_data_aplicacao)
from ism
,sma
,bul
,bpt
where ism_sma_serie = sma_serie
and ism_sma_num = sma_num
and bul_mat_cod = ism_mat_cod
and bpt_bul_med = bul_med
and bpt_pat_cod in (''CXO'',
''CEM'')
and ism_qtde_baixa > 0
and sma_pac_reg = relcir.rcl_pac
and sma_hsp_num = relcir.rcl_hsp
and (ism_data_aplicacao - relcir.rcl_dthr) between 0 and 5) Últ_dose_Cefuroxima_Axetil
,pac_celular Celular_paciente
,pac_fone Telefone_paciente
,(select max(nvl(to_number(replace(replace(
smart.f_resultado_rcl_2(i.rcl_txt, 39321, 1)
, ''?''), '',0'' , '''')/1000), 0)) from rcl i where pac.pac_reg = i.rcl_pac and i.rcl_cod = ''45002'') peso
/*,to_char(relcir.rcl_dthr, ''HH24:MI:SS'') hora_entrada*/
,checkcir.rcl_dthr Entrada_do_Paciente_Na_Sala
,replace(smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28804, 18), ''?'') Inicio_inducao
from
(select rcl.*
,case
when rcl_laudo_rtf is not null and rcl_txt = ''NO_CAMPO_LAUDO_RTF'' then
convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
else
rcl_txt
end rcl_laudo_tratado
from rcl) relcir
,(select rcl.*
,case
when rcl_laudo_rtf is not null and rcl_txt = ''NO_CAMPO_LAUDO_RTF'' then
convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
else
rcl_txt
end rcl_laudo_tratado
from rcl where rcl_stat <> ''C'') checkcir
,rcl_ecp
,psv
,esm
,esp
,rcl_crg
,smk
,ctf
,pac
where relcir.rcl_pac = pac_reg
and relcir.rcl_id = rcl_e_id
and rcl_e_fec_cod = ''C''
and rcl_e_psv_cod = psv_cod
and psv_cod = esm_med
and esm_esp = esp_cod
and esm_default = ''S''
and relcir.rcl_id = rcl_c_id
and rcl_c_via_acesso in (''P'', ''N'')
and rcl_c_smk_tipo = smk_tipo
and rcl_c_smk_cod = smk_cod
and smk_tipo = ''S''
and smk_tipo = ctf_tipo
and smk_ctf = ctf_cod
and smk_cod not in (''2916'',''88020903'',''88021148'',''2549'',''7330'',''8802'',''2509'',''2132'',''2382'',''7311'',''6046'',''2051'',''8801'',''31162'',''8516'',''8819'',''2290'',''8726'',''2393'',''8670'',''31640'',''32699'',''31578'',
''3117'',''2043'',''7386'',''4923'',''2234'',''2452'',''9046'',''8794'',''2107'',''2133'',''31395'',''31342'',''9032'',''31638'',''31798'',''31747'',''6807'',''31663'',''8539'',''9695'',''6779'',''9694'',''31651'',''9693'',''3383'',''2367'',
''31642'',''31582'',''2450'',''2473'',''2324'',''8740'',''2206'',''2063'',''2041'',''9406'',''31166'',''2130'',''32473'',''8727'',''31035'',''5099'',''2136'',''31534'',''31533'',''2391'',''31173'',''2355'',''2373'',''2444'',''31174'',''8671'',
''2093'',''32471'',''31661'',''2356'',''2849'',''2481'',''2908'',''88020919'',''88020730'',''8946'',''31180'',''31181'',''31182'',''31183'',''31184'')
and relcir.rcl_cod = ''RELCIR''
and relcir.rcl_stat not in (''C'', ''A'')
and checkcir.rcl_pac = relcir.rcl_pac
and checkcir.rcl_hsp = relcir.rcl_hsp
and trunc(checkcir.rcl_dthr) = trunc(relcir.rcl_dthr)
and checkcir.rcl_cod = ''CHECKCIR''
and checkcir.rcl_stat not in (''C'', ''A'')
and relcir.rcl_dthr >= to_date ( ''2023-03-24 08:00:00'', ''yyyy-mm-dd hh24:mi:ss'' )
and relcir.rcl_dthr < to_date ( ''2023-03-24 23:59:59'', ''yyyy-mm-dd hh24:mi:ss'' )
Isnar Filho
Curtidas 0
Respostas
Arthur Heinrich
12/04/2023
Esta mensagem de erro indica que você está inserindo um valor maior do que uma variável ou coluna de tabela comportam.
Como o seu código é um select, suspeito que o erro esteja ocorrendo internamente a alguma das funções chamadas na query.
Por exemplo: convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
Não sei o que esta função faz mas, pelo nome, pode ser aqui o problema.
Se você conseguir colocar a sua query dentro de um bloco PL/SQL, com tratamento de erro, do tipo:
Talvez você obtenha uma mensagem mais clara de onde o problema está ocorrendo.
Como o seu código é um select, suspeito que o erro esteja ocorrendo internamente a alguma das funções chamadas na query.
Por exemplo: convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
Não sei o que esta função faz mas, pelo nome, pode ser aqui o problema.
Se você conseguir colocar a sua query dentro de um bloco PL/SQL, com tratamento de erro, do tipo:
set serveroutput on
begin
for row in (<query>) loop
null;
loop;
exception
when others then
dbms_output.put_line(dbms_utility.format_error_stack);
dbms_output.put_line(dbms_utility.format_error_backtrace);
end;
/
Talvez você obtenha uma mensagem mais clara de onde o problema está ocorrendo.
GOSTEI 0
Isnar Filho
12/04/2023
Oi Arthur..
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
Eis o que sei até aqui:
O erro está na seguinte função:
Ela trata um bloco de texto gigante, algo parecido com "@#28804@13&Sim@#28804@3&Não @#28804@17&Sim@#28804@8OMANTA TÉRMICA SUPERIOR " e ele pega tudo tem entre uma determinada sequencia ex @#28804@13& e o proximo @. Inicialmente eu não identifiquei nenhum problema no momento que dá o erro, já até isolei a query na ferramenta que tenho disponível.
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
Eis o que sei até aqui:
O erro está na seguinte função:
smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 14)
Ela trata um bloco de texto gigante, algo parecido com "@#28804@13&Sim@#28804@3&Não @#28804@17&Sim@#28804@8OMANTA TÉRMICA SUPERIOR " e ele pega tudo tem entre uma determinada sequencia ex @#28804@13& e o proximo @. Inicialmente eu não identifiquei nenhum problema no momento que dá o erro, já até isolei a query na ferramenta que tenho disponível.
Esta mensagem de erro indica que você está inserindo um valor maior do que uma variável ou coluna de tabela comportam.
Como o seu código é um select, suspeito que o erro esteja ocorrendo internamente a alguma das funções chamadas na query.
Por exemplo: convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
Não sei o que esta função faz mas, pelo nome, pode ser aqui o problema.
Se você conseguir colocar a sua query dentro de um bloco PL/SQL, com tratamento de erro, do tipo:
Talvez você obtenha uma mensagem mais clara de onde o problema está ocorrendo.
Como o seu código é um select, suspeito que o erro esteja ocorrendo internamente a alguma das funções chamadas na query.
Por exemplo: convertlong_to_varchar(rcl_pac, rcl_tpcod, rcl_cod, rcl_dthr, rcl_hsp)
Não sei o que esta função faz mas, pelo nome, pode ser aqui o problema.
Se você conseguir colocar a sua query dentro de um bloco PL/SQL, com tratamento de erro, do tipo:
set serveroutput on
begin
for row in (<query>) loop
null;
loop;
exception
when others then
dbms_output.put_line(dbms_utility.format_error_stack);
dbms_output.put_line(dbms_utility.format_error_backtrace);
end;
/
Talvez você obtenha uma mensagem mais clara de onde o problema está ocorrendo.
GOSTEI 0
Arthur Heinrich
12/04/2023
Oi Arthur..
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
Eis o que sei até aqui:
O erro está na seguinte função:
Ela trata um bloco de texto gigante, algo parecido com "@#28804@13&Sim@#28804@3&Não @#28804@17&Sim@#28804@8OMANTA TÉRMICA SUPERIOR " e ele pega tudo tem entre uma determinada sequencia ex @#28804@13& e o proximo @. Inicialmente eu não identifiquei nenhum problema no momento que dá o erro, já até isolei a query na ferramenta que tenho disponível.
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
Eis o que sei até aqui:
O erro está na seguinte função:
smart.f_resultado_rcl_2(checkcir.rcl_laudo_tratado, 28805, 14)
Ela trata um bloco de texto gigante, algo parecido com "@#28804@13&Sim@#28804@3&Não @#28804@17&Sim@#28804@8OMANTA TÉRMICA SUPERIOR " e ele pega tudo tem entre uma determinada sequencia ex @#28804@13& e o proximo @. Inicialmente eu não identifiquei nenhum problema no momento que dá o erro, já até isolei a query na ferramenta que tenho disponível.
Bom. Já avançou um pouco. Se você tem a função que apresenta o erro, precisa examinar o código e entender onde está o problema.
Com base na sua descrição, você poderia fazer a busca inicial, identificando a posição de início da string '@#28804@13&', somando o tamanho da tag pesquisada e, em seguida, localizar a posição do próximo '@'.
tag := '@#28804@13&';
inicio := instr(message, tag)+length(tag);
fim := instr(message, '@', inicio);
valor := substr(message, inicio, (fim-inicio));
No exemplo acima, provavelmente a resposta seria 'Sim'. Mas, se não podemos garantir que a mensagem esteja íntegra e que respeite certos padrões, você precisará contornar eventuais falhas.
Por exemplo, se o valor esperado precisa ser de até 100 caracteres, um resultado de (fim-inicio)>100 indica um problema. Você pode tratar o problema retornando erro ou truncando o valor, fazendo:
valor := substr(message, inicio, least(fim-inicio, 100));
Ou algo do tipo.
GOSTEI 0
Arthur Heinrich
12/04/2023
Oi Arthur..
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
deu um erro aqui
variavel de bindig "SS" não declarada
Rodei no developer do oracle, não sei se serve.
O problema da bind variable pode estar relacionado aos parâmetros que a sua query utiliza...
replace(smart.f_resultado_rcl_2(relcir.rcl_laudo_tratado, 21156, 12), ''?'') Data_Cirurgia
... '?' ...
Para testar, a query precisa ser executada com todos os valores atribuídos.
GOSTEI 0