Create Trigger no Banco de Dados
Cria uma Trigger “Gatilho” para a tabela especificada. Trigger é um gatilho disparado após alguma ação ocorrida na tabela, isto é, podem existir Trigger de Insert, Update e Delete. As Trigger pode ser definidas como “Before-Antes” e “After-Depois”. Também pode ser definido um número onde indica qual a seqüência de tirareis a ser seguida. A Trigger só é disparada pela ação na tabela, não podendo ser disparada pela aplicação. Dentro da Trigger há duas formas de se referenciar as colunas das tabelas :
OLD.Coluna e NEW.Coluna. Onde OLD. referencia o valor anterior da coluna e NEW. referencia o novo valor da coluna.
Sintaxe :
CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator
<trigger_body> = [<variable_declaration_list>] <block>
<variable_declaration_list> =
DECLARE VARIABLE variable <datatype>;
[DECLARE VARIABLE variable <datatype>; …]
<block> =
BEGIN
<compound_statement>
[<compound_statement> …]
END
<datatype> = SMALLINT
| INTEGER
| FLOAT
| DOUBLE PRECISION
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {DATE | TIME | TIMESTAMP)
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(int)] [CHARACTER SET charname]
| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]
<compound_statement> = {<block> | statement;}
Ex:
SET TERM !! ;
CREATE TRIGGER “TRG_VERIFICA_ESTOQUE” FOR “ITENS_NOTA” BEFORE INSERT POSITION 0 AS
BEGIN
IF ( NOT EXISTS ( SELECT * FROM PRODUTOS WHERE ID = NEW.ID AND ESTOQUE >= NEW.QTDE_VENDIDA ) ) THEN
EXCEPTION ACABOU_ESTOQUE;
END !!
SET TERM ; !!