Nering 0 Denunciar post Postado Novembro 11, 2008 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
hgb7 3 Denunciar post Postado Novembro 11, 2008 http://www.linhadecodigo.com.br/Artigo.aspx?id=322 Espero que ajude :) Compartilhar este post Link para o post Compartilhar em outros sites
Nering 0 Denunciar post Postado Novembro 11, 2008 Opaa, vou ler amigo!! Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
Motta 645 Denunciar post Postado Novembro 11, 2008 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
Nering 0 Denunciar post Postado Novembro 12, 2008 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
Motta 645 Denunciar post Postado Novembro 12, 2008 Quando se tem legado muitas vezes a melhor solução é mesmo uma trigger. Compartilhar este post Link para o post Compartilhar em outros sites