PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger



Documentos relacionados
PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

Triggers no PostgreSQL

PL/pgSQL por Diversão e Lucro

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

Bancos de Dados I. Integridade semântica

Sistemas de Informação

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

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

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

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

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

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

A linguagem SQL

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

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

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

Oracle 10g: SQL e PL/SQL

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

Consultoria e Treinamento em Bancos de Dados Relacionais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

PHP INTEGRAÇÃO COM MYSQL PARTE 1

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Projeto de Banco de Dados

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

FUNCTION ) RETURNS INTEGER AS $$ DECLARE


Integridade dos Dados

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


Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Programação SQL. Introdução

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 Gatilhos (Triggers)

trigger insert, delete, update

SQL Procedural. Josino Rodrigues Neto

SQL. Autor: Renata Viegas

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

PostgreSQL 8.0. Diogo Biazus

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

Operação de União JOIN

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

Banco de Dados Avançados Banco de Dados Ativo

Linguagem SQL Sub-linguagem DDL

Banco de dados 1. Linguagem SQL DDL e DML. Professor: Victor Hugo L. Lopes

Logado no OracleXE vamos acessar a opção:

DESENVOLVIMENTO DE SOFTWARE

Introdução ao SQL. Aécio Costa

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

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

Criação de Log de Ações Através do Banco de Dados. Marcos Thomaz da Silva

SQL DDL Criando Tabelas e Restrições

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

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

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

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

Linguagem de Consulta Estruturada SQL- DML

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

Structured Query Language (SQL)

O que são Bancos de Dados?

Bases de Dados 2007/2008. Aula 9

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

Treinamento em PHP. Aula 7. Ari Stopassola Junior

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

SQL - Criação de Tabelas

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

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

Oracle PL/SQL Overview

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

SQL (Structured Query Language)

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

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

Linguagem de Consulta - SQL

SQL (Structured Query Language)

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

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

SQL (Structured Query Language)

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

Sistemas de Banco de Dados

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

Disciplina: Unidade V: Prof.: Período:

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

Linguagem de Consulta Estruturada (SQL)

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

SQL (Structured Query Language)

TECNOLOGIA WEG II PHP com SGBD MYSQL

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

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

Curso PHP Aula 08. Bruno Falcão

Introdução ao SQL. O que é SQL?

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

Prof.: Clayton Maciel Costa

DESENVOLVIMENTO DE SOFTWARE

Transcrição:

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger a tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco de Dados Por meio dos SGBD - Sistema Gerenciador de Banco de Dados - é possível gerenciar o acesso a dados em um BD. A SQL - linguagem de consulta estruturada -, é uma linguagem padrão ANSI para manipular dados por meio de um sistema gerenciador de banco de dados. A SQL pode ser dividida em 3 sub-linguagens: DDL - linguagem de definição de dados DCL - linguagem de controle de dados DML - linguagem de manipulação de dados Os SGDB devem disponibilizar recursos para manipulação de dados por meio de PL (linguagens procedimentais), Já que a SQL é uma linguagem não procedimental. 1

Ex: Linguagem procedimental linguagem não procedimenta ------------------------------------------------------------------------------- Readln(y); select x,y Y= x*x; from raízes Println(x); where y = x*x Println(y); --------------------------------------------------------------------------- A programação em PL é feita por meio de function (função) Store Procedure (procedimentos armazenada) e Tigger (gatilho). Cada SGDB tem sua maneira própria para tratar esses elementos de programação. As sintaxe apresentadas a seguir referem-se ao ambiente Postgresql. Store Procedure O postgresql emprega o conceito de function para definir store procedure ( procedimentos armazenados) Sintexe básica: Create function nome_da_função (tipo_dado_a, tipo_dado_b, tipo_dado_c) Return tipo AS corpo da função LANGUAGE `nome da linguagem usada no corpo` Dentre as linguagens possíveis para o postgresql temos: SQL PLPGSQL C PERL TEL PYTHONU A aspa no nome da linguagem pode ser opcional, depende da versão do Postgresql( no 8.3 ela já é opcional) A definição do corpo da função depende da linguagem para plpgsql ela deve obedece a seguinte sintaxe: 2

declare variavel1 tipo1, variavel2 tipo2,... BEGIN INSTRUÇÃO 1 INSTRUÇÃO 2 RETURN VALOR RETORNO END; LANGUAGE 'PLPGSQL'; Obs: 1- As aspas simples podem ser substituídas por $$ 2 - Para que uma função retorne mais de um valor, mais de uma linha de uma tabela, o tipo de dado no retorno return tipo deve ser SETOF nome_tabela 3 - As variáveis que correspondem aos n-valores passados como parâmetros para a função devem ser nomeadas como $1, $2, $3,.. $n Exemplos: 1 - Função sem parâmetros de entrada primeiro: criação da função Create function dois() returns integer as `select 2; segundo: uso da função Select dois(); 2 - função com parâmetros de entrada 3

primeiro: criação da função create funcition media(decimal,decimal) returns decimal as $$select ($1+$2)/2;$$ segundo: uso da função caso1 select media(10,8); caso2 select media(8,9); 3 - Função que totaliza os valores de itens de uma nota de venda da tabela item_nota CREATE FUNCTION totalnota(integer) RETURNS INTEGER AS ' SELECT SUM(preco) FROM item_nota WHERE numnota = $1; ' LANGUAGE 'SQL'; 4 exemplo função maior salário de tabela funcionário 4.1 criar a tabela create table func(cód integer, nome varchar(30), salário decimal(10,2), comissão decimal(10,2)); 4.2 inserir dados na tabela criada insert into func values(1, ZE,1000,500); insert into func values(2, IVO,1500,200); insert into func values(3, EVA,1800,100); 4.3 crie uma função maior_salario, para exibir o maior salario create funcition maior_salário() returns decimal as select Max(salario) from func; 4.4 usar a função que retorna o maior salario select maior_salario(); 4

5 - Função que concatena textos Create function soma(text, text) returns char as $$ Declare resultado text; Begin resultado := $1 $2; return resultado; End; $$ language 'plpgsql'; usando a função: select soma('sidney ','Silva'); 6 Função que retorna o nome dos clientes que fazem aniversário hoje( data corrente) CREATE FUNCTION aniversariantes() RETURNS SETOF clientes AS' SELECT nome FROM clientes WHERE aniversario = current_date; LANGUAGE 'SQL'; 7- Função que disponibilize o maior valor de venda. create function maiorvenda() returns decimal as 'select Max(valor) from venda;' usando a função: select maiorvenda(); 8- Função que disponibilize o valor total obtido com vendas create function valortotal() returns decimal as 'select sum(valor) from venda;' usando a função: select valortotal(); 9- Crie um store procedure que disponibilize data da ultima venda create function dataultimavenda() returns date as 'select max(data) from venda;' 5

usando a função: select dataultimavenda(); TRIGGER Uma função de gatilho, trigger, é uma ação que o SGBD deve desencadear antes ou depois de um dos seguintes comandos: insert, update ou delete. Sintaxe: Create trigger nome_gatilho {before ou after} {evento[or evento]} on table for each {row ou STATEMENT } execute procedure nome_função (v1,v2,...,vn) Variáveis disponíveis no ambiente de programação - PL NEW Tipo de dado RECORD; variável contendo a nova linha do banco de dados, para as operações de INSERT/UPDATE nos gatilhos no nível de linha. OLD Tipo de dado RECORD; variável contendo a antiga linha do banco de dados, para as operações de UPDATE/DELETE nos gatilhos no nível de linha.. TG_NAME Tipo de dado name; variável contendo o nome do gatilho disparado. TG_WHEN Tipo de dado text; uma cadeia de caracteres contendo BEFORE ou AFTER, dependendo da definição do gatilho. TG_LEVEL Tipo de dado text; uma cadeia de caracteres contendo ROW ou STATEMENT, dependendo da definição do gatilho. TG_OP Tipo de dado text; uma cadeia de caracteres contendo INSERT, UPDATE, ou DELETE, informando para qual operação o gatilho foi disparado. TG_RELID Tipo de dado oid; o ID de objeto da tabela que causou o disparo do gatilho. TG_RELNAME Tipo de dado name; o nome da tabela que causou o disparo do gatilho. TG_NARGS Tipo de dado integer; o número de argumentos fornecidos ao procedimento de gatilho na instrução CREATE TRIGGER. 6

TG_ARGV[] Tipo de dado matriz de text; os argumentos da instrução CREATE TRIGGER. O contador do índice começa por 0. Índices inválidos (menor que 0 ou maior ou igual a tg_nargs) resultam em um valor nulo. Exemplos: 1 Gatilho que ao se efetuar uma inserção na tabela venda armazena na tabela data o usuario, o nome venda e a data com hora. Create trigger auditoria after insert on venda for each Statement execute procedure inseriu(); Create function inseriu() returns trigger as insert into data values (user,'vendas',now()); Create table data(usuario varchar(50), tabela varchar(50), Datahora timestamp); 2 - Crie um gatilho que a cada mudança no preço de venda de um produto armazene os dados na tabela histórico. Create trigger atualiza_preco_venda after update on produto for each row execute procedure incluir_historico(); Create function incluir_historico () returns trigger as begin if (old..valor_venda<>new.valor_venda) then insert into historico (data, user, valor_anterior, valor_atual) values (now(),user,old.valor_venda, new.valor_venda); return null; end; language plpgsql; 7