Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nering

[Resolvido]  - Trigger

Recommended Posts

Salve estimados foristas,

 

Sou novo no fórum, meu primeiro post e meu primeiro tópico...

Iniciante na áre de BD, estou precisando de ajuda na criação de um trigger que emita na tela do usuário um erro

quando ele tentar gravar uma determinada transação (insert ou update) em que um determinado campo da tabela em questão não possa ficar

nulo.

 

O campo em questão é o seguinte ("TPPLANO_USUARIO").

 

A empresa que desenvolveu o sistema o fez de modo que não consigo implementar o bloco abaixo:

 

alter table HOSPITAL_GUIA

add check ("TPPLANO_USUARIO" IS NOT NULL);

 

Me gerando um erro de constraint, não consigo implementar isso.

Minha saída é fazer um trigger que não deixe o usuário gravar a transação se este campo não estiver preenchido.

 

Alguém por ai poderia me ajudar???

 

Desde já agradeço.

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crieo que o erro se deva ao fato da coluna TPPLANO_USUARIO ter valores nulos o que não permite a criação da constraint.

 

soluções

 

1) faça uma atualização da coluna que permita a criação da constraint

 

2) Crie a constraint com a opção novalidate , vai permitir a criação mas qualquer mudança num registro que viole a constraint (pode ser até outra coluna sendo alterada) irá gerar uma exceção.

 

3) Tratar isto por trigger , aí acho que o artigo citado talvez te ajude, neste mesmo site tem outros artigos.

 

ajudou ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crieo que o erro se deva ao fato da coluna TPPLANO_USUARIO ter valores nulos o que não permite a criação da constraint.

 

soluções

 

1) faça uma atualização da coluna que permita a criação da constraint

 

2) Crie a constraint com a opção novalidate , vai permitir a criação mas qualquer mudança num registro que viole a constraint (pode ser até outra coluna sendo alterada) irá gerar uma exceção.

 

3) Tratar isto por trigger , aí acho que o artigo citado talvez te ajude, neste mesmo site tem outros artigos.

 

ajudou ?

Então cara, eu entendi perfeitamente o que você disse mas no momento acabei implementando o bloco abaixo no bd:

 

 

CREATE OR REPLACE TRIGGER TR_BI_BU_BD_TPPLANO_USUARIO
BEFORE INSERT OR UPDATE ON HOSPITAL_GUIA
REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW

BEGIN

  IF :NEW.TPPLANO_USUARIO IS NULL THEN
	 raise_application_error(-20000,'Favor preencher o campo PLANO.');
  END IF;

  IF :NEW.NOPLANO_USUARIO IS NULL THEN
	 raise_application_error(-20000,'Favor preencher o campo PLANO TISS.');
  END IF;
END TR_BI_BU_BD_TPPLANO_USUARIO;

 

De quebra, começou a funcionar perfeitamente...

Os usuários que estavam me dando "trabalho" agora não poderão mais continuar trabalhando de forma errônea com o sistema.

 

 

Agradeço a Ajuda!

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando se tem legado muitas vezes a melhor solução é mesmo uma trigger.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.