Criar Trigger para não deletar determinado registro

Firebird

16/10/2007

Boa noite pessoal !

Gostaria de criar uma trigger para não deletar do BD um determinado usuário, alguém já fez algo parecido ? Tentei criar como segue abaixo, mas não tive sucesso:

CREATE TRIGGER TRG_USUARIO_ADMIN FOR TBL_USUARIO
ACTIVE AFTER DELETE POSITION 0
AS
DECLARE VARIABLE ACHOU VARCHAR(10);
BEGIN
SELECT LOGIN
FROM TBL_USUARIO
WHERE LOGIN = ´X´ INTO ACHOU

IF (:ACHOU IS NOT NULL) THEN
EXCEPTION ACHOU;

END;




Obrigado.
Hilton


Hilton

Hilton

Curtidas 0

Respostas

Marco Salles

Marco Salles

16/10/2007

e so uma opinião... Mas pq esta usando o AFTER... A primeira tentativa
deveria ser feito com o [b:30d6b16174]Before[/b:30d6b16174]

CREATE TRIGGER TRG_USUARIO_ADMIN FOR TBL_USUARIO ACTIVE [u:30d6b16174]AFTER[/u:30d6b16174] DELETE POSITION 0 AS



GOSTEI 0
Hilton

Hilton

16/10/2007

Boa noite pessoal !

Agora deu certo, eu não tinha criado o exception.

CREATE EXCEPTION MENSAGEM_1 ´Esse usuário não pode ser removido.´;

CREATE TRIGGER TRG_USUARIO_ADMIN FOR TBL_USUARIO
ACTIVE BEFORE DELETE POSITION 0
AS
BEGIN
IF (OLD.GRUPO_USUARIO = 1 AND OLD.LOGIN = ´X´) THEN
BEGIN
EXCEPTION MENSAGEM_1;
END
END;



Obrigado.
Hilton


GOSTEI 0
Marco Salles

Marco Salles

16/10/2007

´evento´ Before e consequentemente deve lançar a Exceção... sem problema... Mas engraçado , parece que voce estava usando uma exceção no primeiro post , tal como fora postado


CREATE TRIGGER TRG_USUARIO_ADMIN FOR TBL_USUARIO ACTIVE AFTER DELETE POSITION 0 AS DECLARE VARIABLE ACHOU VARCHAR(10); BEGIN SELECT LOGIN FROM TBL_USUARIO WHERE LOGIN = ´X´ INTO ACHOU IF (:ACHOU IS NOT NULL) THEN [u:4de68d6580][b:4de68d6580]EXCEPTION ACHOU; [/b:4de68d6580][/u:4de68d6580] END;


so me parecia estar usando o [b:4de68d6580]After[/b:4de68d6580] , sendo que deveria usar o [b:4de68d6580]Before [/b:4de68d6580] , tal como fizera no segundo post...


GOSTEI 0
POSTAR