Como descobrir o que dispara erro no forms 6i.

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Tenho um form desenvolvido no forms 6i que estava funcionando normalmente, fiz uma alteração incluindo um botão e a função desse botão é pegar os dados de alguns campos desse form e fazer um insert em uma tabela que não pertence a nenhum bloco de dados desse form.
O insert está dentro de uma unidade de programa e eu chamo esse unidade no clique do botão, porém quando disparo dá o seguinte erro:

Selecionar tudo

ORA-01403: dados não encontrados
Alguém sabe uma forma de eu identificar onde está o problema que dispara esse erro? Estou tentando identificar mas está complicado.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Esse insert que você faz, é baseado em alguma consulta?
Verifique esta situação, pois algo está dando NO_DATA_FOUND.

Manda o trecho do código de insert pra gente.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

chequei todas as select´s que faço, e as que podem não retornar dados estou utilizando nvl, porém crio dois cursores e 1 deles pode ou não retornar dados. Pode ser isso? Se for tem como eu contornar? Usar algum artifício como nvl no cursor?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Então brother, acho que o que está pegando é o seguinte:

O NVL, não trata NO_DATA_FOUND.
O NVL só traz um outro tipo de resultado, caso venha a coluna e, nula.
Quando dá NO_DATA_FOUND, não vem o registro todo.
Segue abaixo um teste que fiz:

Selecionar tudo

SELECT * FROM emp;
Resultado:

Selecionar tudo

      7999	TREVIS 	SALESMAN 	      7902	08-jan-2007	      1400
      7369	SMITH 	CLERK 	          7902	17-dez-1980	       800	       


NVL

Selecionar tudo

SELECT empno,
       NVL(comm,10)
 FROM emp
WHERE empno = 7999 ;
Resultado:


-- Quando não existir o registro (resultado do NVL):

Selecionar tudo


SELECT empno,
       NVL(comm,10)
 FROM emp
WHERE empno = 9999 ;
Resultado:
----------

Não retornou nada.

Você deveria tratar essas consultas, beleza?
qualquer coisa, manda ai.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Mas estava fazendo uns testes aqui e mesmo tendo retorno de dados em todos os selects continua dando o erro.
Existe mas alguma coisa que possa disparar isso?
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

A minha sugestão é que você trate a Exception em todos os pontos possíveis, para que você saiba exatamente onde está dando este erro.

Se for o caso, coloque os trechos possíveis aqui pra gente analisar, beleza?
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Tem uma lista das exception que podem ser disparadas? Procurei aqui na documentação do Forms mas não achei.
O código é um pouco grande mas segue ele:

Selecionar tudo

PROCEDURE P_GERAR_PEDIDO IS
v_cod_venda					number;
v_cod_pedido				number;
v_cod_venda_bonif		number;
v_cod_pedido_bonif	number;
v_data_entrega			date;
v_data							date;
v_valor_desconto		number;
v_hora							varchar2(4);
v_bonif							number;

cursor itens_pedido is
	select * from bw_simula_venda_ro
	where id_ro = :bw_simula_preço_ro.id_ro;

cursor itens_bonif is
	select * from bw_simula_bonif_ro
	where id_ro = :bw_simula_preço_ro.id_ro;

BEGIN
	select sum(preço_tabela * volume) - :bw_simula_venda_ro.soma_faturamento 
		into v_valor_desconto
	from bw_simula_venda_ro
	where id_ro = :bw_simula_preço_ro.id_ro;
	
	select to_char(sysdate, 'hh24mi'), to_char(sysdate + 500, 'DD/MM/RRRR'), to_char(sysdate, 'DD/MM/RRRR')
		into v_hora, v_data_entrega, v_data
	from dual;
	
	select nvl(count(*), 0) 
		into v_bonif
	from bw_simula_bonif_ro
	where id_ro = :bw_simula_preço_ro.id_ro;
	
  select nro_venda + 1
  	into v_cod_venda
  from bebwilson.param_gerais
  where chave_acesso = 0
  	for update of nro_venda nowait;
  
  update bebwilson.param_gerais set nro_venda = nro_venda + 1
  where chave_acesso = 0;
  
  forms_ddl('commit');
  
  select nro_ped + 1
  	into v_cod_pedido
  from bebwilson.param_gerais
  where chave_acesso = 0
  	for update of nro_pedido nowait;
  
  update bebwilson.param_gerais set nro_ped = nro_ped + 1
  where chave_acesso = 0;
  
  forms_ddl('commit');
  
  insert into vendas(
  									 cod_venda,
  									 cli_cod_cli,
  									 prep_cod_prep,
  									 prep_repre_cod_repre,
  									 repre_cod_repre,
  									 banco_num_banco,
  									 frete_cod_tipo_frete,
  									 data_venda,
  									 data_lanca,
  									 total_ped,
  									 data_entrega,
  									 total_frete,
  									 total_desc,
  									 qde_cx,
  									 qde_uni,
  									 venda_bonif,
  									 cod_plano,
  									 vlr_entrada_cheque,
  									 vlr_entrada_outros,
  									 usuario,
  									 tv_id_tv,
  									 contr_prod_id_contr_prod,
  									 suframa
  									 )values(
  									 				 v_cod_venda,
  									 				 :bw_simula_preço_ro.cod_cliente,
  									 				 0,
  									 				 :bw_simula_preço_ro.cod_repres,
  									 				 :bw_simula_preço_ro.cod_repres,
  									 				 9999,
  									 				 :bw_simula_preço_ro.cod_frete,
  									 				 v_data,
  									 				 v_data,
  									 				 :bw_simula_venda_ro.soma_faturamento,
  									 				 v_data_entrega,
  									 				 :bw_simula_preço_ro.valor_frete,
  									 				 v_valor_desconto,
  									 				 :bw_simula_venda_ro.soma_volume,
  									 				 0,
  									 				 0,
  									 				 null,
  									 				 null,
  									 				 null,
  									 				 user,
  									 				 1,
  									 				 null,
  									 				 null
  									 				 );

	insert into pedidos(
											VENDA_COD_VENDA,                     
                      COD_PED,                             
                      PRECOS_VERSAO,
                      PRECOS_COD_preço,
                      EMP_COD_EMPRESA,
                      C_PAG_COD_COND_PAG,
                      OP_PED_COD_OPERACAO,
                      FORMA_PAG_COD_FORMA_PAG,
                      STA_COD_STATUS,
                      STA_APROV_COD_STA_APROV,
                      STA_APROV_COD_STA_APROV_STA_AP,
                      TIPO_EXP_COD_EXP,
                      DIST_COD_DIST,
                      TOTAL_FRETE,
                      TOTAL_PEDIDO,
                      QDE_CAIXAS,
                      QDE_UNIDADES,
                      TOTAL_PESO,
                      ICMS_MS_COD_ICMS_MS,
                      TAB_VIAG_ID_VIAGEM,
                      TOTAL_DESCONTO,
                      NUM_PEDIDO_CLI,
                      OBS,
                      TAM_M3,
                      NUM_PED_TDV,
                      DESC_ADIC,
                      COMIS_ADIC,
                      CARENCIA,
                      PED_HOR_INIC,
                      PED_HOR_TERM,
                      DATA,
                      USUARIO,
                      ONDE,
                      DATA_ENTREGA,
                      PED_LER_OBS,
                      DESC_FINANC,
                      DESC_FINANC_OUTROS,
                      PED_TMP_VIAGEM,
                      ID_TP_ORIGEM,
                      DATA_ENTREGA_REALIZADA,
                      NUM_PED_BONI,
                      DATA_RECEBIMENTO_TRANS,
                      DATA_DEVOLUCAO,
                      ID_EVENTO
                      )values(
                      				v_cod_venda,
                      				v_cod_pedido,
                      				:bw_simula_preço_ro.cod_versao,
                      				:bw_simula_preço_ro.cod_tabela,
                      				3,
                      				4,
                      				:bw_simula_preço_ro.cfop,
                      				:bw_simula_preço_ro.cod_distancia,
                      				1,
                      				1,
                      				19,
                      				3,
                      				:bw_simula_preço_ro.cod_cond_pag,
                      				:bw_simula_preço_ro.valor_frete,
                      				:bw_simula_venda_ro.soma_faturamento,
                      				:bw_simula_venda_ro.soma_volume,
                      				0,
                      				:bw_simula_venda_ro.soma_peso_bruto,
                      				null,
                      				null,
                      				v_valor_desconto,
                      				null,
                      				'SOMENTE TESTE. NÃO CARREGAR. Pedido gerado automaticamente pela simulação nro. ' || :bw_simula_preço_ro.id_ro,
                      				0,
                      				null,
                      				0,
                      				0,
                      				null,
                      				v_hora,
                      				v_hora,
                      				sysdate,
                      				user,
                      				'SIMULACAO',
                      				v_data_entrega,
                      				'N',
                      				null,
                      				null,
                      				'N',
                      				null,
                      				null,
                      				null,
                      				null,
                      				null, 
                      				null
                      				);
                   				
	for vitens_pedido in itens_pedido loop	
		insert into itens_pedidos(
															 PED_COD_PED,
	                             PED_VENDA_COD_VENDA,
	                             CADPRO_COD_ACA,
	                             ITEM_FRETE_ITEM_preço_PRECOS_C,
	                             ITEM_FRETE_ITEM_preço_PRECOS_V,
	                             ITEM_FRETE_DIST_COD_DIST,
	                             TUNID_COD_UNID,
	                             QDE_PEDIDA,
	                             preço_UNIT,
	                             VALOR_UNIT_DESC,
	                             PORC_DESCONTO,
	                             VALOR_TOTAL,
	                             DESCONTO_TOTAL,
	                             PORC_COMISSAO,
	                             VALOR_FRETE,
	                             VALOR_COMIS,
	                             TOTAL_PESO,
	                             TAM_M3,
	                             QDE_ATENDIDA,
	                             preço_TAB,
	                             PORC_DESC_COMISSAO,
	                             DATA,
	                             USUARIO,
	                             ONDE,
	                             PROMO_ID_PROMO,
	                             PORC_DESC_FINANCEIRO,
	                             PORC_DESC_FINANCEIRO_OUTROS,
	                             DESC_FINANCEIRO,
	                             DESC_FINANCEIRO_OUTROS
	                             )values(
	                             				v_cod_pedido,
	                             				v_cod_venda,
	                             				vitens_pedido.cod_prod_venda,
	                             				:bw_simula_preço_ro.cod_tabela,
	                             				:bw_simula_preço_ro.cod_versao,
	                             				:bw_simula_preço_ro.cod_distancia,
	                             				9,
	                             				vitens_pedido.volume,
	                             				vitens_pedido.preço_venda,
	                             				vitens_pedido.preço_tabela - vitens_pedido.preço_venda,
	                             				vitens_pedido.per_desconto,
	                             				vitens_pedido.preço_venda * vitens_pedido.volume,
	                             				(vitens_pedido.preço_tabela - vitens_pedido.preço_venda) * vitens_pedido.volume,
	                             				0,
	                             				0,
	                             				0,
	                             				vitens_pedido.peso_bruto,
	                             				0,
	                             				vitens_pedido.volume,
	                             				vitens_pedido.preço_tabela,
	                             				0,
	                             				sysdate,
	                             				user,
	                             				'SIMULACAO',
	                             				null,
	                             				null,
	                             				null,
	                             				null,
	                             				null
	                             				);

	end loop;
		
	if v_bonif > 0 then		
		select nro_venda + 1
	  	into v_cod_venda_bonif
	  from bebwilson.param_gerais
	  where chave_acesso = 0
	  	for update of nro_venda nowait;
	  
	  update bebwilson.param_gerais set nro_venda = nro_venda + 1
	  where chave_acesso = 0;
	  
	  forms_ddl('commit');
	  
	  select nro_ped + 1
	  	into v_cod_pedido_bonif
	  from bebwilson.param_gerais
	  where chave_acesso = 0
	  	for update of nro_pedido nowait;
	  
	  update bebwilson.param_gerais set nro_ped = nro_ped + 1
	  where chave_acesso = 0;
	  
	  forms_ddl('commit');
		
		insert into vendas(
	  									 cod_venda,
	  									 cli_cod_cli,
	  									 prep_cod_prep,
	  									 prep_repre_cod_repre,
	  									 repre_cod_repre,
	  									 banco_num_banco,
	  									 frete_cod_tipo_frete,
	  									 data_venda,
	  									 data_lanca,
	  									 total_ped,
	  									 data_entrega,
	  									 total_frete,
	  									 total_desc,
	  									 qde_cx,
	  									 qde_uni,
	  									 venda_bonif,
	  									 cod_plano,
	  									 vlr_entrada_cheque,
	  									 vlr_entrada_outros,
	  									 usuario,
	  									 tv_id_tv,
	  									 contr_prod_id_contr_prod,
	  									 suframa
	  									 )values(
	  									 				 v_cod_venda_bonif,
	  									 				 :bw_simula_preço_ro.cod_cliente,
	  									 				 0,
	  									 				 :bw_simula_preço_ro.cod_repres,
	  									 				 :bw_simula_preço_ro.cod_repres,
	  									 				 9999,
	  									 				 :bw_simula_preço_ro.cod_frete,
	  									 				 v_data,
	  									 				 v_data,
	  									 				 :bw_simula_venda_ro.soma_faturamento,
	  									 				 v_data_entrega,
	  									 				 :bw_simula_preço_ro.valor_frete,
	  									 				 v_valor_desconto,
	  									 				 :bw_simula_venda_ro.soma_volume,
	  									 				 0,
	  									 				 0,
	  									 				 null,
	  									 				 null,
	  									 				 null,
	  									 				 user,
	  									 				 1,
	  									 				 null,
	  									 				 null
	  									 				 );
		insert into pedidos(
												VENDA_COD_VENDA,                     
	                      COD_PED,                             
	                      PRECOS_VERSAO,
	                      PRECOS_COD_preço,
	                      EMP_COD_EMPRESA,
	                      C_PAG_COD_COND_PAG,
	                      OP_PED_COD_OPERACAO,
	                      FORMA_PAG_COD_FORMA_PAG,
	                      STA_COD_STATUS,
	                      STA_APROV_COD_STA_APROV,
	                      STA_APROV_COD_STA_APROV_STA_AP,
	                      TIPO_EXP_COD_EXP,
	                      DIST_COD_DIST,
	                      TOTAL_FRETE,
	                      TOTAL_PEDIDO,
	                      QDE_CAIXAS,
	                      QDE_UNIDADES,
	                      TOTAL_PESO,
	                      ICMS_MS_COD_ICMS_MS,
	                      TAB_VIAG_ID_VIAGEM,
	                      TOTAL_DESCONTO,
	                      NUM_PEDIDO_CLI,
	                      OBS,
	                      TAM_M3,
	                      NUM_PED_TDV,
	                      DESC_ADIC,
	                      COMIS_ADIC,
	                      CARENCIA,
	                      PED_HOR_INIC,
	                      PED_HOR_TERM,
	                      DATA,
	                      USUARIO,
	                      ONDE,
	                      DATA_ENTREGA,
	                      PED_LER_OBS,
	                      DESC_FINANC,
	                      DESC_FINANC_OUTROS,
	                      PED_TMP_VIAGEM,
	                      ID_TP_ORIGEM,
	                      DATA_ENTREGA_REALIZADA,
	                      NUM_PED_BONI,
	                      DATA_RECEBIMENTO_TRANS,
	                      DATA_DEVOLUCAO,
	                      ID_EVENTO
	                      )values(
	                      				v_cod_venda_bonif,
	                      				v_cod_pedido_bonif,
	                      				:bw_simula_preço_ro.cod_versao,
	                      				:bw_simula_preço_ro.cod_tabela,
	                      				3,
	                      				4,
	                      				417,
	                      				:bw_simula_preço_ro.cod_distancia,
	                      				1,
	                      				1,
	                      				19,
	                      				3,
	                      				:bw_simula_preço_ro.cod_cond_pag,
	                      				:bw_simula_preço_ro.valor_frete,
	                      				:bw_simula_bonif_ro.soma_custo_total,
	                      				:bw_simula_bonif_ro.soma_bonificacao,
	                      				0,
	                      				:bw_simula_bonif_ro.soma_peso_bruto_bonif,
	                      				null,
	                      				null,
	                      				v_valor_desconto,
	                      				null,
	                      				'SOMENTE TESTE. NÃO CARREGAR. Pedido de bonificação, referente ao pedido ' || v_cod_pedido || 'gerado automaticamente pela simulação nro. ' || :bw_simula_preço_ro.id_ro || '.',
	                      				0,
	                      				null,
	                      				0,
	                      				0,
	                      				null,
	                      				v_hora,
	                      				v_hora,
	                      				sysdate,
	                      				user,
	                      				'SIMULACAO',
	                      				v_data_entrega,
	                      				'N',
	                      				null,
	                      				null,
	                      				'N',
	                      				null,
	                      				null,
	                      				null,
	                      				null,
	                      				null, 
	                      				null
	                      				);
	                      				
		for vitens_bonif in itens_bonif loop			
			insert into itens_pedidos(
																 PED_COD_PED,
		                             PED_VENDA_COD_VENDA,
		                             CADPRO_COD_ACA,
		                             ITEM_FRETE_ITEM_preço_PRECOS_C,
		                             ITEM_FRETE_ITEM_preço_PRECOS_V,
		                             ITEM_FRETE_DIST_COD_DIST,
		                             TUNID_COD_UNID,
		                             QDE_PEDIDA,
		                             preço_UNIT,
		                             VALOR_UNIT_DESC,
		                             PORC_DESCONTO,
		                             VALOR_TOTAL,
		                             DESCONTO_TOTAL,
		                             PORC_COMISSAO,
		                             VALOR_FRETE,
		                             VALOR_COMIS,
		                             TOTAL_PESO,
		                             TAM_M3,
		                             QDE_ATENDIDA,
		                             preço_TAB,
		                             PORC_DESC_COMISSAO,
		                             DATA,
		                             USUARIO,
		                             ONDE,
		                             PROMO_ID_PROMO,
		                             PORC_DESC_FINANCEIRO,
		                             PORC_DESC_FINANCEIRO_OUTROS,
		                             DESC_FINANCEIRO,
		                             DESC_FINANCEIRO_OUTROS
		                             )values(
		                             				v_cod_pedido,
		                             				v_cod_venda,
		                             				vitens_bonif.cod_prod_bonificacao,
		                             				:bw_simula_preço_ro.cod_tabela,
		                             				:bw_simula_preço_ro.cod_versao,
		                             				:bw_simula_preço_ro.cod_distancia,
		                             				9,
		                             				vitens_bonif.qtd_bonificada,
		                             				vitens_bonif.preço_tabela_bonificada,
		                             				0,
		                             				vitens_bonif.per_desconto_bonificacao,
		                             				vitens_bonif.preço_tabela_bonificada * vitens_bonif.qtd_bonificada,
		                             				0,
		                             				0,
		                             				0,
		                             				0,
		                             			  vitens_bonif.peso_bruto_bonif,
		                             				0,
		                             				vitens_bonif.qtd_bonificada,
		                             				vitens_bonif.preço_tabela_bonificada,
		                             				0,
		                             				sysdate,
		                             				user,
		                             				'SIMULACAO',
		                             				null,
		                             				null,
		                             				null,
		                             				null,
		                             				null
		                             				);
		end loop;
	end if;

exception
	when no_data_found then
	message('Não foram localizados os dados necessários para realizar a operação.');
	when others then
	message('Ocorreu um erro geral no sistema.');
	
END;
Agora que coloquei a exception others está caindo nela.
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Pra saber mais especificamente, coloque a Exception de OTHERS desta forma brother:

Selecionar tudo

  when others then 
   message('Ocorreu um erro geral no sistema. Erro:' || SQLERRM); 
 end;
qualquer coisa, manda ai.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Vlw pela força. Consegui localizar o erro, era uma conversão em um campo date. Agora está redondo.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 9 visitantes