Bloco só aceita registro com os mesmo "tipos"

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Galera, boa noite.

Seguinte, preciso fazer a seguinte verificação num bloco, só pode aceitar registros com o mesmo tipo, por exemplo:

01 - Produto 01 - Alimento
02 - Produto 02 - Alimento

ou

01 - Produto 01 - NULL
02 - Produto 02 - NULL

Não pode acontecer o seguinte:

01 - Produto 01 - Alimento
02 - Produto 02 - Limpeza

ou

01 - Produto 01 - NULL
02 - Produto 02 - Alimento

Esse campo que eu tenho que fazer a verificação é armazenado na tabela como number, exceto quando está NULL (Lógico né *rs*).

Me pediram para fazer essa verificação na trigger PRE-INSERT e no POST-QUERY se não me engano, tentei fazer no Pre-Insert do bloco pai, mas não consegui. Tentei das seguintes formas: 1# Usando o go_block e fazendo um loop no bloco, mas o go_block não pode ser usado no Pre-Insert. 2# Tentei fazer select na base, mas estou tendo problemas com os campos NULL.

Dai eu queria uma luz dos colegas aqui de como vocês fariam isso, de preferência, tentando fazer nas duas triggers ali em cima ( Antes de Inserir e antes de Atualizar).

[ ]s
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

E aí galera, ninguém ???

Bom, tentei fazer com o código abaixo, mas queria uma opinião de vocês para saber se é a melhor forma:

Selecionar tudo

/* Verificando se os tipos de dose são diferentes */
				
				declare
					v_n_tipo number := 0;
					v_n_count number := 0;
				begin
					
					go_block('medicamento_protocolo');
				
					first_record;
					v_n_tipo := :medicamento_protocolo.class_id_tipo_dose;
					next_record;
					
					loop
						
						if v_n_tipo != :medicamento_protocolo.class_id_tipo_dose then
							v_n_count := v_n_count + 1;
						end if;
						
						exit when :system.last_record = 'TRUE';
						next_record;
					end loop;
					
					if v_n_count > 0 then
						msg('Não é permitido Tipos de Dose diferentes no mesmo regime!');
						raise form_trigger_failure;
					else	
						commit;
						:medicamento_protocolo.tipo_dose := pck_util.fnc_get_descricao_class(:medicamento_protocolo.class_id_tipo_dose);
					end if;
				end;
Desse jeito, estou com problemas quando só se tem 1 registro, pois com o next_record, ele dá um "insert" e alguns campos são obrigatórios.

Att.

Tiago Pimenta
Responder
  • Informação
  • Quem está online

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