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

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 em SQLite. Fernando Lobo. Base de Dados, Universidade do Algarve

Sistemas de Informação

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

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

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

Bancos de Dados I. Integridade semântica

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

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

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Tarefa Orientada 19 Triggers

trigger insert, delete, update

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

Banco de Dados Avançados Banco de Dados Ativo

SQL Gatilhos (Triggers)

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

Triggers no PostgreSQL

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

Integridade dos Dados

PL/pgSQL por Diversão e Lucro

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



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

Bases de Dados 2007/2008. Aula 9

Centro Universitário Franciscano

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

SQL Procedural. Josino Rodrigues Neto

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

Tarefa Orientada 15 Manipulação de dados

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

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

Logado no OracleXE vamos acessar a opção:

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

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

Oracle 10g: SQL e PL/SQL

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

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

SQL: Interrogações simples

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

Regras de Negócios é com o Elefante!

SQL DDL Criando Tabelas e Restrições

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

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

Projeto de Banco de Dados

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

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Hugo Pedro Proença, 2007

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

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

PHP INTEGRAÇÃO COM MYSQL PARTE 1

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

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

A linguagem SQL

Tarefa Orientada 18 Procedimentos armazenados

BANCO DE DADOS DISTRIBUÍDOS e DATAWAREHOUSING

Programação SQL. Introdução

Views. uma view é uma tabela virtual. não existe fisicamente na BD. é definida à custa de outras tabelas ou views. CREATE VIEW <nome> AS <query>;

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

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

SQL: Vistas, Indices, Autorização, Restrições

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

PROGRAMA. Objectivos Gerais :

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

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

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

Tarefa Orientada 16 Vistas

Prova de Fundamentos de Bancos de Dados 2 a Prova

Prova de Fundamentos de Bancos de Dados 2 a Prova

Tipos de dados complexos e objectos Tipos de dados estruturados e herança em SQL Herança de tabelas Matrizes e multi-conjuntos em SQL Identidade de

Segurança de Acesso a Banco de Dados no MS SQL Server

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

Consultoria e Treinamento em Bancos de Dados Relacionais

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

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 20. Escola Politécnica da Universidade de São Paulo

Introdução à linguagem SQL

Oracle PL/SQL Overview

Introdução ao SQL. Aécio Costa

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

Bases de Dados 2007/2008. Aula 8

SQL (Structured Query Language)

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

PostgreSQL 8.0. Diogo Biazus

Persistência de Dados

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Prova de Fundamentos de Bancos de Dados 2 a Prova

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade.

Modelagem de Banco de Dados através do ERwin

Bases de Dados 2005/2006. Aula 5

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Bases de Dados 2007/2008. Aula 1. Referências

Prof. Josenildo Silva

DESENVOLVIMENTO DE SOFTWARE

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Transcrição:

Triggers e Regras Fernando Lobo Base de Dados, Universidade do Algarve 1 / 14 Triggers Um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre. O evento pode ser INSERT, UPDATE, ou DELETE. O trigger pode ser accionado imediatamente antes (BEFORE) ou imediatamente depois (AFTER) de cada evento. 2 / 14

Triggers A sequência de comandos (procedimento) pode ser programada numa linguagem qualquer desde que devidamente instalada no servidor do SGBD. No exemplo que se segue, vamos utilizar PL/pgSQL, uma linguagem procedimental que vem instalada no PostgreSQL e que é muito semelhante à PL/SQL da Oracle. 3 / 14 Exemplo Pretende-se apagar um estúdio se não houver nenhum filme que lhe faça referência. Associamos um trigger à tabela de filmes. O trigger será accionado logo após um delete ou um update à tabela de filmes. Ao ser disparado, o trigger irá executar um procedimento chamado apaga estudio sem ref() CREATE TRIGGER estudio_sem_ref AFTER DELETE OR UPDATE ON Filmes FOR EACH ROW EXECUTE PROCEDURE apaga_estudio_sem_ref(); 4 / 14

Exemplo (cont.) O procedimento verifica se existe algum filme produzido pelo estúdio que acabou de ser apagado (ou actualizado). Em caso negativo, apaga esse estúdio da tabela de estúdios. CREATE FUNCTION apaga_estudio_sem_ref () RETURNS OPAQUE AS DECLARE estudio VARCHAR(40); BEGIN estudio := OLD.nomeEstudio; IF NOT EXISTS (SELECT * FROM Filmes WHERE nomeestudio = estudio) THEN DELETE FROM Estudios WHERE nome = estudio; RAISE NOTICE Estudio % foi apagado., estudio; END IF; RETURN NULL; END; LANGUAGE plpgsql ; 5 / 14 Regras (Rules) As regras (rules em português) não fazem parte do SQL standard, mas são implementadas pelo PostgreSQL e dão muito jeito. Permitem especificar uma acção alternativa que é executada em selects, inserts, updates, ou deletes. Sintaxe: CREATE RULE name AS ON event TO object [WHERE rule_qualification] DO [INSTEAD] [ action (actions) NOTHING ]; 6 / 14

Regras (cont.) Quando o evento é um insert, update ou delete, podemos fazer referência a duas pseudo-tabelas, NEW e OLD, que se referem aos novos tuplos (no caso de inserts e updates) e aos velhos tuplos (no caso de deletes e updates). Exemplo: a seguinte regra não permite apagar filmes da Disney. CREATE RULE nao_apaga_filmes_disney AS ON DELETE TO Filmes WHERE OLD.nomeEstudio = Disney DO INSTEAD NOTHING; 7 / 14 Regras e Vistas Em PostgreSQL, as views são implementadas com rules. Em PostgreSQL, as views são read-only, mas podemos simular a escrita em views utilizando rules. Exemplo: criar uma regra de modo a podermos inserir tuplos na view filmes disney. CREATE VIEW filmes_disney (nome,ano,realizador) AS SELECT nome, ano, nomerealizador FROM Filmes WHERE nomeestudio = Disney ; 8 / 14

Exemplo (cont.) CREATE RULE insere_filmes_disney AS ON INSERT TO filmes_disney DO INSTEAD INSERT INTO Filmes (nome, ano, nomerealizador, nomeestudio) VALUES (NEW.nome, NEW.ano, NEW.realizador, Disney ); Agora já podemos inserir dados na view. INSERT INTO filmes_disney VALUES ( The Huntchback of Notre Dame, 1995, Steven Spielberg ); 9 / 14 Outro exemplo Inserir dados na view filmes actores CREATE VIEW filmes_actores (filme, ano, estudio, realizador, actor) AS SELECT F.nome, F.ano, F.nomeEstudio, F.nomeRealizador, P.nomeActor FROM Filmes AS F, Participa AS P WHERE F.nome = P.nomeFilme AND F.ano = P.anoFilme; A inserção de um tuplo na view, pode fazer com que tenhamos de inserir tuplos na tabela Filmes, Estudios, Realizadores, Actores e Participa. 10 / 14

Outro exemplo (cont.) CREATE RULE insere_em_filmes_actores AS ON INSERT TO filmes_actores DO INSTEAD (INSERT INTO Filmes(nome, ano, nomeestudio, nomerealizador) VALUES (NEW.filme, NEW.ano, NEW.estudio, NEW.realizador); INSERT INTO Actores(nome) VALUES (NEW.actor); INSERT INTO Estudios(nome) VALUES (NEW.estudio); INSERT INTO Realizadores(nome) VALUES (NEW.realizador); INSERT INTO Participa(nomeFilme,anoFilme,nomeActor) VALUES (NEW.filme, NEW.ano, NEW.actor); ); 11 / 14 Outro exemplo (cont.) Agora podemos inserir dados na view filmes actores. INSERT INTO filmes_actores VALUES ( Taxi Driver, 1978, Universal, Martin Scorcese, Roxana Arquette ); 12 / 14

Os inserts podem dar erro porque podem violar restrições que hajam nas tabelas. Por exemplo, se o estúdio Universal já existir na tabela de estúdios, o insert falha porque o nome do estúdio é chave primária. A solução para este problema é criar regras adicionais. Por exemplo: CREATE RULE nao_insere_estudios_duplicados AS ON INSERT TO Estudios WHERE( EXISTS (SELECT * FROM Estudios WHERE nome=new.nome ) ) DO INSTEAD NOTHING; 13 / 14 A inserção de dados na view esconde a inserção efectiva dos dados nas tabela base. Ao inserir dados na view ficamos impossibilitados de inserir todos os atributos das tabelas base. Esses atributos ficam com o valor NULL (ou com o valor que estiver especificado como DEFAULT). Podem consultar mais coisas na documentação online do PostgreSQL (Programmer s Guide Server Programming The Rule System) http://www.postgresql.org/docs/9.3/static/rules.html 14 / 14