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 ; !!