Jump to content

Archived

This topic is now archived and is closed to further replies.

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!

Share this post


Link to post
Share on other 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 ?

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.