Bancos de Dados I. Integridade semântica



Documentos relacionados
Sistemas de Informação

Triggers no PostgreSQL

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

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

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

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

PL/pgSQL por Diversão e Lucro

Oracle 10g: SQL e PL/SQL

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

FUNCTION ) RETURNS INTEGER AS $$ DECLARE


RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

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

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

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


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

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

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

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

Banco de Dados Avançados Banco de Dados Ativo

SQL Procedural. Josino Rodrigues Neto

Integridade dos Dados

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

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

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

SQL Gatilhos (Triggers)

Logado no OracleXE vamos acessar a opção:

Regras de Negócios é com o Elefante!

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

trigger insert, delete, update

SQL DDL Criando Tabelas e Restrições

Consultoria e Treinamento em Bancos de Dados Relacionais

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

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

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE

Centro Universitário Franciscano

Banco de Dados II. PL/SQL - Procedures -Cursor - Funções. Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

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

BANCO DE DADOS DISTRIBUÍDOS e DATAWAREHOUSING

Oracle PL/SQL Overview

Projeto de Banco de Dados

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

Linguagem PL/SQL e Triggers

PostgreSQL 8.0. Diogo Biazus

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

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

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

Prova de Fundamentos de Bancos de Dados 2 a Prova

Funções Definidas pelo Usuário

A linguagem SQL

14/9/2009. Banco de Dados

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

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

UNIVERSIDADE FEDERAL FLUMINENSE PÓLO UNIVERSITÁRIO DE RIO DAS OSTRAS FACULDADE FEDERAL DE RIO DAS OSTRAS CURSO DE CIÊNCIA DA COMPUTAÇÃO

MANUAL INSTALAÇÃO WEB SERVICE

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

António Rocha Nuno Melo e Castro

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Material Teórico. Procedures, Functions, Exceptions e Triggers. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

Bases de Dados 2007/2008. Aula 9

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...

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

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

Comandos de Manipulação

FIREBIRD: UMA ANÁLISE DE PERFORMANCE

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

Acadêmico: Fabiano Bender. Orientadora: Joyce Martins FURB 2012/2

Prova de Fundamentos de Bancos de Dados 2 a Prova

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

ADMINISTRAÇÃO DE BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

f. Exemplo: verificar condição de aprovação de alunos

(1,n) venda. (1,1) realizacao. cliente. (0,n) (1,1) contem. produto. Laboratório de Banco de Dados Exercicios

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

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO.

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

BD II (SI 587) Procedimentos Armazenados

Operação de União JOIN

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

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

Prova de Fundamentos de Bancos de Dados 2 a Prova

Prof. Josenildo Silva

Triggers(Gatilhos) Tiago Alves de Oliveira

Oracle 10g Dicas de PL/SQL. Conteúdo

Introdução ao SQL. Aécio Costa

Bases de Dados 2007/2008. Aula 8

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

Tarefa Orientada 19 Triggers

Introdução Sintaxe Básica Retornos Múltiplos Junções em Funções Comando Case Atividade. de Banco de Dados (CREATE FUNCTION) Bruno Neiva Moreno

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

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

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

Transcrição:

Bancos de Dados I PUC-Rio Departamento de Informática (DI) Eng./Ciência da Computação e Sist. Informação Contrôle de Integridade em SGBDs: procedimentos armazenados, gatilhos e funções Prof. sergio@inf.puc-rio.br Sala 414 RDC Integridade semântica No modelo relacional, as integridades estruturais chave, entidade, domínio e referencial podem ser controladas com a criação das tabelas! Integridades semânticas (regras de negócio business rules) podem ser controladas na aplicação (não recomendado) ou por meio de visões (com check option), procedimentos armazenados (stored procedures ou SPs), gatilhos (triggers) e funções. 1

Sintaxe de Funções Sintaxe (varia de SGBD para SGBD): CREATE [OR REPLACE] FUNCTION nome_funcao [[parametro1 [IN OUT IN OUT] tipo], ] RETURN tipo AS [declaração de variáveis locais, cursores, etc] END [nome_funcao]; Funções - exemplo Base Carros Criar no SGBD uma função (armazenada!) que recebe como parâmetro um CGC de uma revendedora e um ano e retorne quantos veículos daquele ano especificado a revendedora, com este CGC, possui em estoque; 2

Funções sintaxe PostgreSQL CREATE OR REPLACE FUNCTION conta (CGC_in integer, ano_in char) RETURNS integer as $$ DECLARE total integer; select sum(quantidade) into total from garagens g where g.cgc = cgc_in and g.ano = ano_in; return total; END; $$ LANGUAGE plpgsql; Funções uso em SQL Revendedora Self Car / Ano 95 select * FROM conta (10100, '95'); Resultado: 10 Revendedora Dirija / Ano 92 select * FROM conta (10370, '92'); Resultado: 3 3

Sintaxe de Procedimentos Exemplo (também depende do SGBD) : CREATE [OR REPLACE] PROCEDURE nome_procedimento [[parametro1 [IN OUT IN OUT] tipo], ] AS [declaração de variáveis locais, cursores, etc] END [nome_procedimento]; Procedimentos - Exemplo Base CARROS Criar um procedimento armazenado que apresenta o seguinte relatório (considerando a tabela negócios): Revendedora Tiana ItaliaBarra EuroBarra Polux Total de Vendas R$350.000,00 R$600.000,00 NÃO VENDEU R$120.000,00 4

Procedimentos sintaxe PostgreSQL CREATE OR REPLACE FUNCTION relatorio() RETURNS void as $$ DECLARE nomec char(20); valorc numeric(16,2); meu_cursor cursor is select nome, valor from (select cgc, sum(preco) as valor from negocios group by cgc) totais, revendedoras where totais.cgc = revendedoras.cgc; OPEN meu_cursor; RAISE INFO 'REVENDEDORA - TOTAL DE VENDAS'; loop fetch meu_cursor into nomec, valorc; if not found then exit ; end if; RAISE INFO '% - %', nomec, valorc; end loop; CLOSE meu_cursor; END; $$ LANGUAGE plpgsql Exemplo: Sintaxe de Gatilhos CREATE [OR REPLACE] TRIGGER nome {BEFORE AFTER INSTEAD OF} {DELETE INSERT UPDATE OF col1,col2 } [OR DELETE INSERT UPDATE OF col1,col2... ] ON {Tabela visão} [REFERENCING OLD AS nome1 NEW AS nome2] [FOR EACH [ROW STATEMENT] [WHEN (condição)]... END [nome_trigger]; 5

Gatilhos- exemplo Base CARROS Criar um gatilho que, antes da realização de um negócio (venda de um automóvel de uma revendedora para um consumidor), verifique se o veículo que está sendo vendido de fato existe no estoque da revendedora. Gatilho sintaxe PostgreSQL CREATE OR REPLACE FUNCTION tem_estoque() -- primeiro uma função RETURNS trigger AS $tg_tem_estoque$ DECLARE qtd integer; qtd := 0; select quantidade into qtd from garagens g where g.cgc = New.cgc and g.codigo = New.codigo and g.ano = New.ano; RAISE INFO 'qtd= %', qtd; if (qtd <= 0) or qtd IS NULL then RAISE EXCEPTION 'Nao tem o carro % - ano % em estoque', NEW.codigo, NEW.ano; RETURN NULL; end if; RETURN NEW; END; $tg_tem_estoque$ LANGUAGE plpgsql; CREATE TRIGGER tg_tem_estoque BEFORE INSERT OR UPDATE ON negocios FOR EACH ROW EXECUTE PROCEDURE tem_estoque(); 6

Exemplo adicional Crie um trigger para armazenar na tabela LOG_VENDAS_ABAIXO_TAB as informações sobre negócios efetuados nos quais o preço de compra do veículo foi menor que o preço da tabela. Exemplo.: insert into negocios (cpf, cgc, codigo, ano, data, preco) values ('7685-5', 10150, 1111, '95','08/15/1995',8250.00) Solução CREATE OR REPLACE FUNCTION log_vendas() RETURNS trigger AS $tg_log_vendas$ DECLARE preco_tab numeric(15,2); select preco_tabela into preco_tab from automoveis a where a.codigo = NEW.codigo and a.ano = NEW.ano; if (NEW.preco < preco_tab) then insert into log_vendas_abaixo_tab(cpf,cgc,codigo,ano,data,diferenca) values(new.cpf,new.cgc,new.codigo,new.ano,new.data, preco_tab - New.preco); end if; RETURN NEW; END; $tg_log_vendas$ LANGUAGE plpgsql; CREATE TRIGGER tg_log_vendas BEFORE INSERT OR UPDATE ON NEGOCIOS FOR EACH ROW EXECUTE PROCEDURE log_vendas(); 7

Exemplo adicional 2 Crie um trigger para, após a realização de um negócio, atualizar a quantidade de veículos disponíveis em GARAGENS. Solução 2 CREATE OR REPLACE FUNCTION atualiza_estoque() RETURNS trigger AS $tg_atualiza_estoque$ update garagens g set quantidade = quantidade - 1 where g.cgc = New.cgc and g.codigo = New.codigo and g.ano = New.ano; RETURN NULL; END; $tg_atualiza_estoque$ LANGUAGE plpgsql; CREATE TRIGGER tg_atualiza_estoque AFTER INSERT ON NEGOCIOS FOR EACH ROW EXECUTE PROCEDURE atualiza_estoque(); 8