Sistemas de Informação

Documentos relacionados
Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Triggers no PostgreSQL

Bancos de Dados I. Integridade semântica

PL/pgSQL por Diversão e Lucro

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

SQL Procedural. Josino Rodrigues Neto

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Relatório. Projecto de Base de Dados Parte 2. Turno: quinta-feira, 11:30 Grupo 25: André Gonçalves Rui Barradas Hélton Miranda 68477

GBC043 - Sistemas de Banco de Dados Funções e Gatilhos no PostgreSQL

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

PL/pgSQL. Introdução. Introdução. Introdução

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

trigger insert, delete, update

Oracle 10g: SQL e PL/SQL

Regras de Negócios é com o Elefante!

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Bases de Dados 2012/2013 Funções/procedimentos e triggers. Helena Galhardas 2012 IST. Bibliografia. Manual referência PostgreSQL

Tarefa Orientada 19 Triggers

SQL Gatilhos (Triggers)

Bases de Dados 2007/2008. Aula 9


Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Consultoria e Treinamento em Bancos de Dados Relacionais

SQL - Criação de Tabelas

Banco de Dados Avançados Banco de Dados Ativo

SQL DDL Criando Tabelas e Restrições

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

A linguagem SQL

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

Transações Seguras em Bancos de Dados (MySQL)

Logado no OracleXE vamos acessar a opção:


Gatilhos (Triggers) Prof. Márcio Bueno Elaborado por Maria Lígia B. Perkusich

Oracle PL/SQL Overview

Projeto de Banco de Dados

Programação SQL. Introdução

Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

SQL: Definição de tabelas, Modificações à Base de Dados

Integridade dos Dados

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

PostgreSQL 8.0. Diogo Biazus

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

Linguagens Procedurais no PostgreSQL: Funcoes. Linguagens Procedurais no PostgreSQL: Funcoes

Hugo Pedro Proença, 2007

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

SQL. Definição do Esquema da Base de Dados. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Bases de Dados. Restrições de integridade. Restrições de integridade. As restrições de integridade garantem a consistência da BD exemplos

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Tarefa Orientada 15 Manipulação de dados

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Monitoria GDI Aula Prática. DML + PL/SQL parte 1

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

Linguagem SQL Sub-linguagem DDL

SQL (Structured Query Language)

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

EXEMPLOS DE COMANDOS NO SQL SERVER

GES013 - Sistema de Banco de Dados Funções e Gatilhos no PostgreSQL

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Create Sequence Cria uma sequence. Uma sequence é um objeto que permite vários usuários gerarem valores inteiros sem repetição.

PHP INTEGRAÇÃO COM MYSQL PARTE 1

2. Criar um bloco PL/SQL anônimo para imprimir as tabuadas abaixo: 5 X 10 = 50 5 X 2 = X 10 = X 2 = 2...

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Prof. Josenildo Silva

AULA 8 CRIANDO UMA CLASSE EM PHP INTERAGINDO COM BANCO DE DADOS - COM RELACIONAMENTO ENTRE TABELAS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

estiver abaixo ou igual ao mínimo, um novo pedido é acrescentado a uma relação pedidos.

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak

Comandos de Manipulação

Introdução ao SQL. Aécio Costa

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

Banco de Dados PLPGSQL. Prof. Dr. Joel da Silva

SQL Structured Query Language

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

BANCO DE DADOS: SQL. Edson Anibal de Macedo Reis Batista. 27 de janeiro de 2010

António Rocha Nuno Melo e Castro

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

Tarefa Orientada 18 Procedimentos armazenados

Replicação de Dados no Interbase

EXERCÍCIOS PRÁTICOS. Banco de Dados

Auditoria de sistemas Deixe que seu banco de dados faça o trabalho por você

Operação de União JOIN

Regras de Integridade. Profa. Késsia Marchi

Linguagem PL/SQL e Triggers

Transcrição:

Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07

Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK - NOT NULL - FOREIGN KEY - UNIQUE KEY - PRIMAY KEY A maior parte das Bases de Dados oferece um mecanismo de triggers que permite executar código quando uma certo evento acontece na Base de Dados (por exemplo, quando uma nova linha é inserida numa tabela) Para além deste mecanismo, o PostrgreSQL também permite a captura de eventos de outra forma, mais simples mas não tão poderosa, usando rules (regras).

Rules Ao contrário dos triggers, as regras modificam a query que está ser executada. Em PostgreSQL as vistas são modeladas internamente como regras. Uma regra tem a seguinte sintaxe: CREATE RULE rule_name AS ON event TO object [WHERE rule_qualification] DO [INSTEAD] [action (actions) NOTHING];

Sintaxe CREATE RULE rule_name AS ON event TO object [WHERE rule_qualification] DO [INSTEAD] [action (actions) NOTHING]; Uma regra é disparada quando um certo evento (select, insert, update ou delete) é disparado sobre um certo objecto (relação ou tabela). Quando esse evento é disparado a regra executa algumas acções depois, antes ou em vez do evento original. Pode ainda simplesmente suprimir o evento original.

Ordem de Execução No caso de regras sobre eventos do tipo insert, as novas acções são executadas antes das linhas da query original serem inseridas na tabela. No caso de regras sobre eventos do tipo delete ou update, as novas acções são executadas depois das linhas da query original serem inseridas na tabela. Isto se a regra não for do tipo instead.

Utilização As regras permitem, por exemplo, criar uma forma alternativa de fazer update numa tabela: CREATE RULE rule_produto_ins AS ON insert TO produto_chegou DO INSTEAD UPDATE produto SET stock = stock + NEW.quantidade; A pseudo-linha NEW permite aceder aos valores que iriam ser introduzidos originalmente.

Utilização Podemos ainda, por exemplo, fazer log de todas as alterações numa determinada tabela. CREATE RULE rule_utilizador_log_ins AS ON insert TO utilizador DO INSERT INTO utilizador_log VALUES (NEW.id, NEW.login, C, now); CREATE RULE rule_utilizador_log_upd AS ON update TO utilizador DO INSERT INTO utilizador_log VALUES (NEW.id, NEW.login, U, now);

Triggers Os triggers são um mecanismo muito mais complexo que as regras mas também muito mais poderoso. Os triggers definem funções a serem executadas antes ou depois de um determinado tipo de queries. Antes de criarmos um trigger temos de definir uma função apropriada: - Tem de retornar o tipo trigger. - Não pode receber parâmetros.

Funções Uma função associada a um trigger pode fazer uma de três coisas (se for do tipo before): - não inserir/modificar ou apagar a linha em questão retornando null; - modificar a linha a inserir ou modificar; - retornar um erro. Se o trigger for do tipo after pode retornar null.

Precauções Um trigger pode executar um comando que provoque a execução de um outro trigger. Isto pode dar origem a uma recursão infinita que a BD não detecta automaticamente.

Sintaxe A sintaxe usada para criar um trigger é a seguinte: CREATE TRIGGER <name> BEFORE AFTER INSERT OR UPDATE OR DELETE ON <tablename> [FOR EACH ROW] EXECUTE PROCEDURE <function>();

Implementação das funções As funções associadas aos triggers podem ser criadas usando várias linguagens. O C é a linguagem por defeito mas outras podem ser instaladas como por exemplo o pgplsql.

PL/pgSQL Sistemas de Informação 2006/07

CREATE FUNCTION CREATE FUNCTION soma(a INTEGER, b INTEGER) RETURNS INTEGER AS ' DECLARE res INTEGER; BEGIN res := a + b; return res; END; ' LANGUAGE plpgsql;

Query Sem Resultados CREATE FUNCTION apagaempregado(id INTEGER) RETURNS VOID AS ' BEGIN DELETE FROM empregado WHERE emp_id = id; PERFORM * FROM empregado WHERE emp_id = id; IF FOUND THEN RAISE EXCEPTION ''empregado não apagado ''; END IF; END; ' LANGUAGE plpgsql;

Query Com 1 Resultado CREATE FUNCTION getnomeempregado(id INTEGER) RETURNS VARCHAR AS ' DECLARE record RECORD; BEGIN SELECT * INTO record FROM empregado WHERE emp_id = id; IF NOT FOUND THEN RAISE EXCEPTION ''empregado % não existente'', id; END IF; RETURN record.emp_nome; END; ' LANGUAGE plpgsql;

Query Com Vários Resultados CREATE FUNCTION getsomasalarios(dep INTEGER) RETURNS INTEGER AS ' DECLARE soma INTEGER := 0; emp RECORD; BEGIN FOR emp IN SELECT * FROM empregado WHERE dep_id = dep LOOP soma := soma + emp.emp_salario; END LOOP; RETURN soma; END; ' LANGUAGE plpgsql;

Ciclos WHILE NOT boolean_expression LOOP -- some computations here END LOOP; FOR i IN 1..10 LOOP -- some computations here RAISE NOTICE 'i is %', i; END LOOP;

Condições IF boolean_expression THEN -- some computations here ELSIF boolean_expression THEN -- some computations here ELSE -- some computations here END IF;

Funções para Triggers CREATE FUNCTION verificatipoempregado() RETURNS TRIGGER AS ' BEGIN IF NEW.emp_tipo = ''adm'' AND NEW.emp_password IS NULL THEN RAISE EXCEPTION ''os admins têm de ter pass''; END IF; RETURN NEW; -- Retorna a linha a ser inserida END; ' LANGUAGE PLPGSQL; CREATE FUNCTION descidapermissoes() RETURNS TRIGGER AS ' BEGIN IF OLD.emp_tipo = ''adm'' AND NEW.emp_tipo = ''emp'' THEN RAISE EXCEPTION ''os admins não podem perder permissões''; END IF; RETURN NEW; -- Retorna a linha a ser modificada END; ' LANGUAGE PLPGSQL;