Buscar

final TRABALHO LPBD.docx



Continue navegando


Prévia do material em texto

TRIGGERS (GATILHOS) 
O termo trigger (gatilho em inglês) define uma estrutura do banco de dados que funciona, como 
o nome sugere, como uma função que é disparada mediante alguma ação. Geralmente essas 
ações que disparam os triggers são alterações nas tabelas por meio de operações de inserção, 
exclusão e atualização de dados (insert, delete e update). 
Um gatilho está intimamente relacionado a uma tabela, sempre que uma dessas ações é 
efetuada sobre essa tabela, é possível dispará-lo para executar alguma tarefa. 
CRIANDO TRIGGERS 
Sintaxe de criação de trigger: 
CREATE TRIGGER​ [NOME DO TRIGGER] 
ON​ [NOME DA TABELA] 
[FOR/AFTER/INSTEAD OF] [INSERT/UPDATE/DELETE] 
AS 
--CORPO DO TRIGGER 
 
Os parâmetros são: 
● NOME DO TRIGGER: nome que identificará o gatilho como objeto do banco de dados. 
Deve seguir as regras básicas de nomenclatura de objetos. 
● NOME DA TABELA: tabela à qual o gatilho estará ligado, para ser disparado mediante 
ações de insert, update ou delete. 
● FOR/AFTER/INSTEAD OF: uma dessas opções deve ser escolhida para definir o 
momento em que o trigger será disparado. FOR é o valor padrão e faz com o que o 
gatilho seja disparado junto da ação. AFTER faz com que o disparo se dê somente 
após a ação que o gerou ser concluída. INSTEAD OF faz com que o trigger seja 
executado no lugar da ação que o gerou. 
● INSERT/UPDATE/DELETE: uma ou várias dessas opções (separadas por vírgula) 
devem ser indicadas para informar ao banco qual é a ação que disparará o gatilho. Por 
exemplo, se o trigger deve ser disparado após toda inserção, deve-se utilizar AFTER 
INSERT. 
Exemplo 
CREATE TRIGGER atualiza_funcionario 
AFTER INSERT OR UPDATE 
ON funcionario 
FOR EACH ROW 
EXECUTE PROCEDURE update(); 
STORED PROCEDURE 
(PROCEDIMENTOS) 
Stored procedures são, pequenos pedaços de código que ficam armazenados no lado do 
servidor de banco de dados. A construção desses pedaços de código é tida como uma boa 
prática por programadores que podem, por exemplo, deixar no lado do servidor códigos 
complexos que são utilizados por vários aplicativos, evitando a necessidade de replicá-los em 
cada um deles. 
Diferentemente de outros SGBDs que tratam os conceitos de procedimentos armazenados, 
gatilhos e funções como coisas distintas, o PostgreSQL trata todos eles como funções 
No PostgreSQL podemos utilizar diferentes linguagens para escrevermos nossas funções. Essas 
linguagens podem ser divididas em três grupos ou categorias: as não procedurais, as 
procedurais e as que utilizam linguagem externa e mais complexa. As não procedurais utilizam 
a SQL como linguagem. 
Exemplo 
CREATE OR REPLACE FUNCTION update() 
RETURNS TRIGGER AS 
$$ BEGIN 
INSERT INTO historico VALUES(old.cod_func, old.cod_depto, 
old.nome, old.salario, old.cargo, old.data); 
RETURN NULL; 
END; 
$$ LANGUAGE PLPGSQL; 
 
 
 
 
 
 
 
 
 
 
FUNCTION (FUNÇÃO) 
Uma function é um bloco PL/SQL muito semelhante a uma procedure. O que podemos 
entender de início entre esses dois tipos de blocos é que os blocos functions retornam valores 
e as procedures podem ou não retornar um valor. As functions têm duas características que 
diferem das procedures, as quais não podem deixar de tratar: 
● As functions sempre retornam valores 
● Functions são usadas como parte de uma expressão. 
Os parâmetros são: 
● CREATE [OR REPLACE] FUNCTION:​ Caso uma function já exista com o mesmo 
nome, ela será reescrita devido ao termo ‘replace’. Caso contrário, ela será criada de 
acordo com o termo ‘create’. 
● Function_name:​ Será o nome atribuído para essa função. 
● Parameters:​ a lista opcional de parâmetros contém os nomes, os modos e os tipos 
que esses parâmetros terão. O IN representa o valor que será passado de fora, já o 
OUT representa que este parâmetro será utilizado para retornar um valor de fora do 
procedimento. 
● Return_datatype:​ é o tipo de retorno que será utilizado, sendo este SQL ou PL/SQL. 
Podemos neste caso utilizar referências como o %TYPE ou %ROWTYPE se 
necessário, ou mesmo utilizar qualquer tipo de dados escalar ou composto. 
● IS/AS:​ por convecção, temos o ‘is’ para a criação de funções armazenadas e o ‘as’ 
quando criamos pacotes (packages). 
● function_body:​ contém o bloco PL/SQL que inicia com a claúsula ​BEGIN​ e finaliza 
com END [function_name], e executa neste momento todas as instruções necessárias. 
 
Exemplo 
CREATE OR REPLACE FUNCTION CALCULO() 
RETURNS FLOAT AS $$ 
DECLARE 
i FLOAT := 0; 
soma RECORD; 
media FLOAT := 0; 
BEGIN 
 FOR soma IN SELECT * FROM funcionario 
 LOOP 
 
i := i + soma.salario; 
 
END LOOP; 
 
media := i / 5; 
RETURN i; 
RAISE NOTICE '%',i; 
END 
$$ LANGUAGE PLPGSQL;