- Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 10 anos, 4 meses atrás por Fábio Prado.
-
AutorPosts
-
3 de julho de 2014 às 10:45 pm #106745Tadeu Rodrigues de OliveiraParticipante
Meus caros, boa tarde.
Estou com o seguinte problema.
Tenho uma procedure que executa um insert em uma tabela temporária e para isso utilizo uma query dinamica em função dos parâmetros necessários.
Ao tentar executar a procedure ela me apresentou a seguinte mensagem de erro:ORA-06502-PL/SQL: ERRO: character string buffer to small numerico ou de valor.
ORA-06512: em “SYS_DBMS_OUTPUT”, line 151
ORA-06512: em line 2Segue abaixo o código que estou tentando rodar para ver se algum dos colegas consegue me ajudar.
create or replace procedure mgcli.al_p_posmov_locarm
(
comp_st_nome varchar2,
usu_in_codigo number,
fil_in_codigo number,
alm_in_codigo number,
dt_movimento_i date,
dt_movimento_f date
) isv_comp_st_nome varchar2(255) := comp_st_nome;
v_usu_in_codigo number(5,0) := usu_in_codigo;
v_fil_in_codigo number(7,0) := fil_in_codigo;
v_org_tab_in_codigo number(3,0);
v_org_pad_in_codigo number(3,0);
v_org_in_codigo number(7,0);
v_alm_in_codigo number(6,0) := alm_in_codigo;
v_alm_st_almoxar varchar2(100);
v_loc_in_codigo number(6,0);
v_loc_st_nome varchar(100);
v_pro_in_codigo number(7,0);
v_pro_st_descricao varchar2(100);
v_saldo_anterior number(15,3);
v_saldo_anterior_fardos number(9,0);
v_quantidade_entrada number(15,3);
v_quantidade_saida number(15,3);
v_quantidade_saida_devolucao number(15,3);
v_qtd_fardos_entrada number(9,0);
v_qtd_fardos_saida number(9,0);
v_qtd_fardos_saida_devolucao number(9,0);
v_saldo_atual number(15,3);
v_saldo_atual_fardos number(9,0);
v_peso_medio_entradas number(9,3);
v_qtd_fardos_saida_x_pmentrada number(9,0);
v_saldo_fardos_x_pm number(9,0);
v_dt_movimento_i date := dt_movimento_i;
v_dt_movimento_f date := dt_movimento_f;
v_SQL clob;
begin
delete from mgcli.al_tb_rel_posmov_locarm d
where d.comp_st_nome = v_comp_st_nome
and d.usu_in_codigo = v_usu_in_codigo
and d.fil_in_codigo = v_fil_in_codigo;commit;
v_SQL := '';
v_SQL := 'insert into mgcli.al_tb_rel_posmov_locarm m
(
m.comp_st_nome, m.usu_in_codigo,
m.org_tab_in_codigo, m.org_pad_in_codigo,
m.org_in_codigo, m.fil_in_codigo,
m.alm_in_codigo, m.alm_st_almoxar,
m.loc_in_codigo, m.loc_st_nome,
m.pro_in_codigo, m.pro_st_descricao,
m.saldo_anterior, m.saldo_anterior_fardos,
m.quantidade_entrada, m.quantidade_saida,
m.quantidade_saida_devolucao, m.qtd_fardos_entrada,
m.qtd_fardos_saida, m.qtd_fardos_saida_devolucao,
m.saldo_atual, m.saldo_atual_fardos,
m.peso_medio_entradas, m.qtd_fardos_saida_x_pm_entrada,
m.saldo_fardos_x_pm
)
select distinct
v_comp_st_nome, v_usu_in_codigo, l.org_tab_in_codigo, l.org_pad_in_codigo,
l.org_in_codigo, l.fil_in_codigo, l.alm_in_codigo, a.alm_st_almoxar,
l.loc_in_codigo, b.loc_st_nome, m.pro_in_codigo, p.pro_st_descricao,
0 as saldo_anterior, 0 as saldo_anterior_fardos,
sum(case when m.mvt_st_entrsaida = ' || '''ED''' || ' then l.mvl_re_quantidade else 0 end) as quantidade_entrada,
sum(
case when m.mvt_st_entrsaida = ' || '''SD''' || '
and t.tpm_in_codigo not in (
select i.tpm_in_codigo
from mgadm.est_tipomovto i
where (
(i.tpm_st_descricao like ' || '''%Devol%''' || ' and i.tpm_st_descricao like ' || '''%compra%''' || ')
)
) then l.mvl_re_quantidade
else 0 end
) as quantidade_saida,
sum(
case when m.mvt_st_entrsaida = ' || '''SD''' || '
and t.tpm_in_codigo in (
select i.tpm_in_codigo
from mgadm.est_tipomovto i
where (
(i.tpm_st_descricao like ' || '''%Devol%''' || ' and i.tpm_st_descricao like ' || '''%compra%''' || ')
)
) then l.mvl_re_quantidade
else 0 end
) as quantidade_saida_devolucao,
sum(
case when m.mvt_st_entrsaida = ' || '''ED''' || ' then
case when cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) is null then 0
else cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) end
else 0
end
) as qtd_fardos_entradas,
sum(
case when m.mvt_st_entrsaida = ' || '''SD''' || ' then
case when cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) is null then 0
else cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) end
else 0
end
) as qtd_fardos_saidas,sum(
case when m.mvt_st_entrsaida = ' || '''SD''' || ' and t.tpm_in_codigo in (
select i.tpm_in_codigo
from mgadm.est_tipomovto i
where (
(i.tpm_st_descricao like ' || '''%Devol%''' || ' and i.tpm_st_descricao like ' || '''%compra%''' ||')
)
) then
case when cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) is null then 0
else cast(mgadm.adm_pck_estoque.f_retornacarac(l.mvl_st_referencia,1,1) as number) end
else 0 end
) as qtd_fardos_saida_devolucao,
sum(0) as saldo_atual, sum(0) as saldo_atual_fardos,
sum(0) as peso_medio_entradas,
sum(0) as qtd_fardos_saida_x_pm_entrada,
sum(0) as saldo_fardos_x_pm
from mgadm.est_lotesmovimento l,
mgadm.est_movimento m,
mgadm.est_produtos p,
mgadm.est_almoxarifado a,
mgadm.est_almoxlocal b,
mgadm.est_tipomovto t
where m.org_tab_in_codigo = l.org_tab_in_codigo
and m.org_pad_in_codigo = l.org_pad_in_codigo
and m.org_in_codigo = l.org_in_codigo
and m.org_tau_st_codigo = l.org_tau_st_codigo
and m.ser_tab_in_codigo = l.ser_tab_in_codigo
and m.ser_in_sequencia = l.ser_in_sequencia
and m.mvt_in_lancam = l.mvt_in_lancam
and m.tpm_tab_in_codigo = t.tpm_tab_in_codigo (+)
and m.tpm_pad_in_codigo = t.tpm_pad_in_codigo (+)
and m.tpm_in_codigo = t.tpm_in_codigo (+)
and p.pro_tab_in_codigo = l.pro_tab_in_codigo
and p.pro_pad_in_codigo = l.pro_pad_in_codigo
and p.pro_in_codigo = l.pro_in_codigo
and a.alm_tab_in_codigo = b.alm_tab_in_codigo (+)
and a.alm_pad_in_codigo = b.alm_pad_in_codigo (+)
and a.alm_in_codigo = b.alm_in_codigo (+)
and b.alm_tab_in_codigo = l.alm_tab_in_codigo (+)
and b.alm_pad_in_codigo = l.alm_pad_in_codigo (+)
and b.alm_in_codigo = l.alm_in_codigo (+)
and b.loc_in_codigo = l.loc_in_codigo (+) ';if (v_fil_in_codigo <> 0) then
begin
v_SQL := v_SQL || 'and l.fil_in_codigo = ''' || v_fil_in_codigo || ''' ';
end;
end if;if (v_alm_in_codigo <> 0) then
begin
v_SQL := v_SQL || 'and l.alm_in_codigo = ''' || v_alm_in_codigo || ''' ';
end;
end if;v_SQL := v_SQL ||
' and l.mvt_dt_movimento >= ''' || to_char(v_dt_movimento_i) || ''' ' || '
and l.mvt_dt_movimento <= ''' || to_char(v_dt_movimento_f) || ''' ' || ' and t.tpm_in_codigo in ( select tpm_in_codigo from mgadm.est_tipomovto t where t.tpm_ch_qtdeobrigatoria = ' || '''S''' || ' ) and t.tpm_in_codigo in ( ( select i.tpm_in_codigo from mgadm.est_tipomovto i where ( (i.tpm_st_descricao like ' || '''%Transf%''' || ') or (i.tpm_st_descricao like ' || '''%TRANSF%''' || ') or (i.tpm_st_descricao like ' || '''%transf%''' || ') ) ) union select distinct tpm_in_codigo from mgadm.est_tipomovto t where t.tpm_ch_qtdeobrigatoria = ' || '''S''' || ' and t.tpm_in_codigo in ( select i.tpm_in_codigo from mgadm.est_tipomovto i where ( (i.tpm_st_descricao like ' || '''%Devol%''' || ' and i.tpm_st_descricao like ' || '''%compra%''' || ') ) ) ) group by ''' || v_comp_st_nome || ''', ' || v_usu_in_codigo || ', l.org_tab_in_codigo, l.org_pad_in_codigo, l.org_in_codigo, l.fil_in_codigo, l.alm_in_codigo, a.alm_st_almoxar, l.loc_in_codigo, b.loc_st_nome, m.pro_in_codigo, p.pro_st_descricao, 0, 0 order by l.fil_in_codigo, l.alm_in_codigo, l.loc_in_codigo, m.pro_in_codigo;'; end;4 de julho de 2014 às 12:02 am #106746rmanParticipante@Tadeu Rodrigues de Oliveira
Geralmente esse erro acontece quando você ultrapassa o valor máximo do buffer do DBMS_OUTPUT.PUT_LINE. Mas estranho que você não está usando esse procedimento no seu SOURCE.
8 de julho de 2014 às 7:00 am #106752Fábio PradoParticipanteTadeu,
O código desta procedure parece não estar completo. Você tem um código enorme p/ preencher a var V_SQL e não faz nada com ela no final do código? Estranho! Para que possamos te ajudar passe o código completo.
[]s
-
AutorPosts
- Você deve fazer login para responder a este tópico.