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

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

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

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

BANCO DE DADOS DISTRIBUÍDOS e DATAWAREHOUSING

Restrições de Integridade Semântica

Triggers(Gatilhos) Tiago Alves de Oliveira

Curso de Ciência da Computação

FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

Prof. Josenildo Silva

Stored Procedures e Triggers

Linguagem SQL Restrições, Triggers e Views

Subsistema de Integridade Semântica

Subsistema de Integridade Semântica

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

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

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

Banco de Dados I Introdução SQL

Bancos de Dados I. Integridade semântica

ACH2025. Laboratóriode Bases de Dados. SQL Oracle Asserçõese gatilhos. Professora: Fátima L. S. Nunes SISTEMAS DE INFORMAÇÃO

SQL Gatilhos (Triggers)

Tabelas. Banco de Dados I MySQL

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

José Antônio da Cunha

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

Banco de Dados. Professora: Luciana Faria

A linguagem SQL

Triggers no PostgreSQL

SQL PostgreSQL. I Criação de Tabelas. Disciplina: SCC0241 Bases de Dados Professor: Eduardo Hruschka Estagiária PAE: Dayse de Almeida

Sistemas de Informação

Exercício Aula Passada. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Roteiro. SQL: Visões. Suporte de SQL para OLAP SELECT. Detalhando GROUP BY SQL DML CONTINUAÇÃO CONSULTAS AVANÇADAS. Consultas Avançadas Visões

Programação em SGDB s

Sumário. Discussão Exercícios. Discussão Exercícios. Discussão Exercícios. Discussão Exercícios. Programando com SQL Stored Procedures

MODELAGEM DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

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

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

Revisão de Bancos de Dados

SQL Básica. Andre Noel

SQL Linguagem de Manipulação de Dados SQL DML SQL DML. Exemplo Modelo Relacional. Exemplo ME-R SQL DML CONTINUAÇÃO...

Introdução ao PostgreSQL

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Aula 12 Revisão. Prof. Filipe Wall Mutz

IMPLEMENTAÇÃO DE BANCO DE DADOS

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

PL/pgSQL por Diversão e Lucro

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Prova de Fundamentos de Bancos de Dados 2 a Prova

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

Roteiro. SQL Linguagem de Manipulação de Dados. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada. Exercício Aula Passada

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

Sistemas de Informação e Bases de Dados 2012/2013. Stored Procedures e Triggers

TRIGGER e SEGURANÇA. Prof. Edson Thizon

Sumário: 1) Trabalhando com Constraints: - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - DEFAULT

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

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

Conceitos básicos. Funcionario SIAPE Nome Lotacao Cargo Salario Admissao

Administração de Banco de Dados

Preparação criar tabela. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 12/11/2018

Rápida revisão do Modelo Relacional

Múltiplas Tabelas. Disciplina de Banco de Dados

Técni n c i as e L i L n i g n u g age g ns n p ara r Ba B nc n o d e D ados I ACCESS

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

Fundamentos de Banco de Dados Postgre com Sql

Teste Exemplo Revisão da tentativa 1

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Administração de Banco de Dados

Banco de Dados Loja Virtual. CLIENTE(ClienteId, PrimNome, UltNome, Endereço, Cidade, Cep, Telefone)

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

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Sistemas de Informação e Bases de Dados 2012/2013. Restrições de Integridade em SQL

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

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

Funções em PostgreSQL

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

Exame de Recurso de Base de Dados Universidade do Algarve 03/Fev/2005, (duração: 2 horas)

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

SQL Procedural. Josino Rodrigues Neto

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Oracle PL/SQL 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

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

Avisos. SQL: Visões. Roteiro SELECT. Suporte de SQL para OLAP SQL DML CONTINUAÇÃO CONSULTAS AVANÇADAS. Cronograma das próximas aulas

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

BANCO DE DADOS TRIGGERS (GATILHOS) Prof. Fabiano Papaiz IFRN

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

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

Tarefa Orientada 17 Scripts

Laboratório de Banco de Dados. Prof. Luiz Vivacqua.

Orientações. Transações - PostgreSQL. Relembrando: Propriedades desejáveis. Abrir Prompt de comando ROLLBACK

SQL Linguagem de Definição de Dados

Monitoria GDI. Aula Prática. OR (Aula 1)

BD II (SI 587) Procedimentos Armazenados

Transcrição:

Ciência da Computação GBC043 Sistemas de Banco de Dados Programando com SQL s Avisos Vista da segunda prova Data: 03/06 das 13:40 às 15:00h Local: sala 1B137 Profa. Maria Camila Nardini Barioni camila.barioni@ufu.br Bloco B - sala 1B137 1 semestre de 2019 2 Sumário Discussão exercícios aula anterior Gatilhos EXERCÍCIO LAB SP Exercícios 3 8 Atividade em lab Aula 29 Modelo Relacional: Cliente = { CodCli, NomeCli, Endereco, Cidade, CEP, UF, CGC} Vendedor = { CodVend, NomeVend, Salfixo, FaixaComis} Atividade em lab Aula 29 /* (b) Atualizar a Tabela Cliente, alterando para cada cliente um campo TOTALCOMPRAS, em que fique armazenada a quantidade total de pedidos realizados pelo mesmo. Se o campo não existir, crie-o. */ ALTER TABLE CLIENTE ADD COLUMN TOTALCOMPRAS INTEGER; Produto = { CodProd, Unidade, Descri, ValoUnit } Pedido = {NumPed, Prazoentr, CodCli(Cliente.CodCli), CodVend(Vendedor.CodVend) } ItemPedido = { NumPed(Pedido.NumPed), CodProd(Produto.CodProduto), Quant} 9 10 1

Atividade em lab Aula 29 CREATE OR REPLACE FUNCTION AtualizaCliente() RETURNS VOID AS $$ DECLARE AUX cliente%rowtype; BEGIN FOR AUXINSELECT CODCLI FROM CLIENTE LOOP UPDATE CLIENTE SET TOTALCOMPRAS = (SELECT COUNT(NUMPED) FROM PEDIDO WHERE CODCLI = AUX.CODCLI) WHERE CODCLI = AUX.CODCLI; TRIGGER GATILHO END LOOP; END $$ LANGUAGE 'plpgsql'; SELECT * FROM AtualizaCliente() 11 12 Gatilho ou Disparador É uma sub-rotina, semelhante as stored procedures, que tem como característica operacional ser executada automaticamente quando uma determinada ação (INSERT/UPDATE/DELETE) for realizada no banco de dados Uma das maneiras mais práticas de implementar rotinas para garantir a integridade de dados ou de operações Principal diferença entre e Stored Procedure é executado automaticamente Stored Procedure precisa ser explicitamente invocada 13 14 Exemplo... Voltando ao exercício da aula anterior Podem ser utilizados para gerenciar informações do banco de dados Automatizar a geração de dados Fazer a auditoria das modificações Implantar as restrições complexas de integridade Personalizar as autorizações complexas de segurança Modelo Relacional: Cliente = { CodCli, NomeCli, Endereco, Cidade, CEP, UF, CGC} Vendedor = { CodVend, NomeVend, Salfixo, FaixaComis} Produto = { CodProd, Unidade, Descri, ValoUnit } Pedido = {NumPed, Prazoentr, CodCli(Cliente.CodCli), CodVend(Vendedor.CodVend) } ItemPedido = { NumPed(Pedido.NumPed), CodProd(Produto.CodProduto), Quant} Quais gerações de dados poderiam ser automatizadas? 15 16 2

Componentes de um Aciona stored procedures para executar determinadas tarefas Está associado a uma tabela ou uma visão 1. Comando SQL que aciona o trigger O disparo do trigger pode ser ocasionado pelo comando SQL ou por um evento do usuário Em uma tabela, pelos comandos INSERT, UPDATE ou DELETE Em um objeto de esquema, por meio dos comandos CREATE, ALTER ou DROP No carregamento/shutdown do BD por uma mensagem de erro No logon/logoff de um usuário 17 18 Componentes de um 2. Limitador de ação do trigger Representado pela cláusula WHEN Especifica qual condição deve ser verdadeira para que o trigger seja disparado Componentes de um 3. Ação executada pelo trigger É o bloco de comandos que é executado pelo trigger Chama uma stored procedure 19 20 Para criar um trigger é preciso Definir um trigger procedure Criar o trigger propriamente dito, que definirá quando o trigger procedure será executado 21 O trigger procedure é muito similar a um stored procedure, mas é um pouco mais restrito devido à maneira como é chamado Não possui parâmetros de entrada na função Mas pode receber dados de entrada (ver slides à frente) Deve retornar o tipo especial trigger Exemplo: CREATE FUNCTION trigger_procedure_name() -- Sem parâmetros de entrada RETURNS trigger AS -- Retorna tipo trigger $$ BEGIN -- Aqui entra o corpo da trigger_procedure END; $$ language plpgsql; 22 3

Para criar um trigger é preciso Definir um trigger procedure Criar o trigger propriamente dito, que definirá quando o trigger procedure será executado : FORMA GERAL 23 24 : Evento : Evento O trigger dispara quando um evento específico ocorre (INSERT, DELETE ou UPDATE) Mais de um evento pode ser especificado na criação do trigger (separados por OR) CREATE TRIGGER check_salario BEFORE INSERT OR UPDATE /* o trigger é chamando quando ocorre um INSERT ou UPDATE */ ON empregado FOR EACH { ROW STATEMENT } EXECUTE PROCEDURE função ( argumentos ) 25 26 : BEFORE ou AFTER : BEFORE ou AFTER O trigger dispara quando um evento específico ocorre (INSERT, DELETE ou UPDATE) Opção BEFORE: A chamada do trigger é feita antes do evento ocorrer Tipicamente usada para verificação ou modificação dos dados antes deles serem inseridos ou atualizados Opção AFTER: É possível requisitar o disparo do trigger depois que o evento ocorreu Tipicamente usada para propagar atualizações para outras tabelas ou fazer verificação de integridade com outras tabelas 27 28 4

: ROW ou STATEMENT : ROW ou STATEMENT Algumas consultas SQL podem afetar várias linhas de dados. Nesses casos, o trigger pode ser chamado de duas formas: Opção ROW: Nesse caso, o trigger procedure é executado múltiplas vezes, uma para cada linha afetada pelo evento (Insert / Delete / Update) per-row trigger Exemplo: uma atualização pelo comando UPDATE pode afetar diversas linhas da tabela 29 30 : ROW ou STATEMENT Algumas consultas SQL podem afetar várias linhas de dados. Nesses casos, o trigger pode ser chamado de duas formas: Opção STATEMENT: O trigger procedure é chamado somente uma vez independente do número de linhas afetadas na consulta Particularmente, quando nenhuma tupla é afetada o trigger ainda é chamado per-statement trigger Exemplo: gerar um simples registro de auditoria proveniente de uma alteração : WHEN 31 32 : WHEN Uma expressãobooleana que determina se o trigger deve ser executado ou não Se a cláusula WHEN for especificada, a função só será chamada se a condição for verdadeira Nas triggers definidas com FOR EACH ROW, a condição especificada na cláusula WHEN pode referenciar colunas com valores antigos (old) ou novos (new) usando a sintaxe OLD.column_name ou NEW.column_name respectivamente 33 Alteração Recriar com o comando CREATE Desativação ALTER TABLE table_namedisable TRIGGER trigger_name Ativação ALTER TABLE table_nameenable TRIGGER trigger_name Exclusão DROP TRIGGER trigger_name ON table_name 34 5

- Exemplo Suponha que seja necessário auditar a alteração de preço quando o novo preço é inferior a 25% do preço antigo É necessário especificar uma condição do trigger para comparar o preço novo com o preço antigo - Exemplo CREATE TABLE products ( product_id INTEGER CONSTRAINT products_pk PRIMARY KEY, product_type_id INTEGER, name VARCHAR(30) NOT NULL, description VARCHAR(50), price NUMERIC(5, 2) ); 35 36 - Exemplo CREATE TABLE product_price_audit ( product_id INTEGER CONSTRAINT price_audit_fk_products REFERENCES products(product_id), * old_price NUMERIC(5, 2), new_price NUMERIC(5, 2) ); * Chave estrangeira que referencia a tabela que contém os produtos 37 - Exemplo CREATE OR REPLACE FUNCTION audit_product_price() RETURNS trigger AS $$ BEGIN RAISE NOTICE 'product_id = %, old_price = %, new_price = %', old.product_id, old.price, new.price ; RAISE NOTICE 'A redução de preço é de mais de 25 porcento'; -- insert row into the product_price_audit table INSERT INTO product_price_audit (product_id, old_price, new_price) VALUES (old.product_id, old.price, new.price); RETURN NULL; -- sempre deve ter um retorno END $$ language 'plpgsql'; CREATE TRIGGER before_product_price_update BEFORE UPDATE OF price ON products FOR EACH ROW WHEN (new.price < old.price * 0.75) EXECUTE PROCEDURE audit_product_price(); 38 - Exemplo BEFORE UPDATE OF price Significa que o trigger é disparado antes da atualização de price FOR EACH ROW Significa que isso é um trigger em nível de tupla, isto é, o código do trigger é executado uma vez para cada tupla atualizada A condição do trigger é (new.price< old.price * 0.75) O trigger é disparado somente quando o novo preço é menor do que 25 % do preço antigo Os valores novos e antigos do atributo são acessados por meio dos apelidos old e new no trigger 39 - Exemplo per-statement (por sentença): deve retornar sempre NULL row-level (por linha). Duas situações: BEFORE e AFTER BEFORE NEW/OLD para que a operação continue normalmente RETURN NEW nos casos de INSERT e UPDATE OBS: você pode alterar os atributos na variável NEW RETURN OLD para DELETE Para cancelar a operação deve retornar NULL RETURN NULL; AFTER o tipo retornado é ignorado, podendo então ser NULL 40 6

- Exemplo - Exemplo Disparando o trigger Disparando o trigger Para disparar o trigger do exemplo anterior é necessário reduzir o preço de um produto em mais de 25% Para disparar o trigger do exemplo anterior é necessário reduzir o preço de um produto em mais de 25% UPDATE products SET price = price *.7 WHERE product_id IN (5, 10); UPDATE products SET price = price *.7 WHERE product_id IN (5, 10); 41 42 Exemplo 2 - Exemplo Disparando o trigger Para ver o conteúdo da tabela que guarda as informações de auditoria for each row para armazenar data/hora e nome do usuário que inseriu ou modificou empregado SELECT * FROM product_price_audit ORDER BY product_id; PRODUCT_ID OLD_PRICE NEW_PRICE ----------------- -------------- --------------- 5 49.99 34.99 10 15.99 11.19 43 44 Exemplo 2 Exemplo 2 45 46 7

Exercícios Modelo Relacional FUNCIONARIO (idfunc, nome, idade, salario) TRABALHA (idfunc (FUNCIONARIO.idFunc), iddepto (DEPARTAMENTO.idDepto), nro_horas) DEPARTAMENTO (iddepto, nome, orçamento, idgerente (FUNCIONARIO.idFunc), qtdefuncionario, custofpagamento) Exercícios Analise cada uma das restrições de integridade e verifique se elas podem ser expressas em SQL (restrição de domínio, chave primária, chave estrangeira ou restrições CHECK) elas precisam ser impostas por um gatilho Nesse caso, indique quais operações (inserções, exclusões ou atualizações em relações específicas) devem ser monitoradas para forçar a restrição e explique 47 48 Exercícios 1. O número total de horas/semanais que um funcionário trabalha na empresa não pode ser inferior a 20 horas e não pode ultrapassar 44 horas 2. Os funcionários devem ter um salário mínimo de R$ 954,00 3. Todo gerente também deve ser um funcionário 4. A contratação de funcionários por um departamento não pode fazer com que o custo com a folha de pagamento exceda o orçamento do departamento Leitura Adicional para Casa ELMASRI-NAVATHE Sistemas de Banco de Dados Capítulo 5 (Seção 5.2) Manual de SQL do PostgreSQL http://www.postgresqltutorial.com/postgresql-triggers/ 49 51 8