PROCEDIMENTOS ARMAZENADOS (Stored Procedures)



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

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

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

TRANSAÇÕES. Considerando que estes comandos fazem parte de uma TRANSAÇÃO (veremos como indicar isso):

PHP INTEGRAÇÃO COM MYSQL PARTE 1


A linguagem SQL

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

Projeto de Banco de Dados

CONCORRÊNCIA. Buscando aumentar os níveis de concorrência redução da espera em detrimento do isolamento, a SQL definiu alguns níveis de isolamento.

CONCORRÊNCIA. 1. Introdução. Recursos exclusivos. Não necessita controle. Abundância de recursos compartilhados. Controle necessário mas mínimo

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

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

Procedimentos armazenados

Integridade dos Dados

Laboratório de Banco de Dados II Aula 1. Stored Procedures

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Noções de. Microsoft SQL Server. Microsoft SQL Server

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Hugo Pedro Proença, 2007

Exemplos de Gatilhos. Prof. Márcio Bueno

Bases de Dados 2007/2008. Aula 9

Tarefa Orientada 19 Triggers

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

SuperStore. Sistema para Automação de Óticas. MANUAL DO USUÁRIO (Módulo Vendas e Caixa)

Modo Estrutura é o ambiente de definição e estruturação dos campos, tipos de dados, descrição e propriedades do campo.

SQL. Autor: Renata Viegas

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

INTRODUÇÃO BANCO DE DADOS(MYSQL) E PHP

Treinamento sobre SQL

trigger insert, delete, update

INTRODUÇÃO BANCO DE DADOS. Prof. Msc. Hélio Esperidião

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

Controle de transações em SQL

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

Structured Query Language (SQL)

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

ABERTURA E ENCERRAMENTO DE EXERCÍCIO

Sistema Click Principais Comandos

Tarefa Orientada 18 Procedimentos armazenados

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

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

Principais Comandos SQL Usados no MySql

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

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

Como funciona? SUMÁRIO

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

DESENVOLVIMENTO DE SOFTWARE

Stored Procedures. Renata Viegas

ADMINISTRAÇÃO DE BANCO DE DADOS

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

Etapa 1: Criação do bloco e escolha da(s) unidade(s) que devem assinar os documentos

PMAT. Sistema de Análise e Acompanhamento de Operações. Manual. Desenvolvido pelo BNDES AS/DEGEP

Aplicativo da Manifestação do Destinatário. Manual

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Sumário INTRODUÇÃO... 3 INTEGRAÇÃO COM O EMPRESÁRIOERP... 3 AGILIDADE NOS PROCESSOS E APOIO AOS CONTROLES INTERNOS... 3 SAC - ATENDIMENTO...

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

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

Tutorial contas a pagar

Sistemas de Banco de Dados

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Prof. Carlos Majer Aplicações Corporativas UNICID

Histórico de revisões

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

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

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

SQL Procedural. Josino Rodrigues Neto

14 - Como para gerar o boleto para pagamento do período das notas lançadas? 16 - Se no mês, o meu cliente não tiver movimento, o que devo fazer?

INE Banco de Dados II. Sumário

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

Microsoft Access XP Módulo Um

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

MANUAL DO SISTEMA. Versão 6.04

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

Introdução ao SQL. Aécio Costa

Operação de União JOIN

SISTEMA DE ADMINISTRAÇÃO DE LOCAÇÃO IMOBILIÁRIA LISTA DE ATUALIZAÇÕES NOVAS

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

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

Manual de Instruções ISS WEB SISTEMA ISS WEB. Sil Tecnologia LTDA

Esta alteração é feita de duas formas: Cadastro de pedido de compra e ajuste de estoque.

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch)

TECNOLOGIA WEG II PHP com SGBD MYSQL

AJUDA DO TARIFADOR HOSTTAR

Bases de Dados 2007/2008. Aula 8

Manual de instruções rápido para testar o sistema Graces

Banco de Dados. Conversão para o Banco de Dados SisMoura

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

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

USANDO O ROUNDCUBE WEBMAIL

1.1. Usuários com e sem vínculos de representação Como consultar os dados do gestor de segurança e saber quem ele é

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

ROTEIRO DE UTILIZAÇÃO DO PROGRAMA REDEFIS CURITIBA

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

Transcrição:

PROCEDIMENTOS ARMAZENADOS (Stored Procedures) 1. Introdução Stored Procedure é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a qualquer momento tanto pelo SGBD (sistema Gerenciador de Banco de Dados) quanto por um sistema que faz interface com o mesmo. Em uma Stored Procedure, além dos comandos SQL comuns, também podemos ter estruturas de decisão e repetição, típicas das linguagens de programação. 2. Algumas razões para usar Stored Procedures? SP s são utilizadas para mover grande parte do código de manipulação de dados para o servidor, isso elimina a transferência de dados do servidor para o cliente, pela rede, para manipulação redução do tráfego na rede melhor performance geral. Acesso ao BD sem us de Stored Procedures Acesso ao BD com uso de Stored Procedures Sempre que uma aplicação cliente envia um comando SQL para o servidor, o comando tem que ter a sintaxe analisada e, a seguir, é submetido a um programa otimizador do SGBD para formulação de um plano de execução. Já as SP s são analisadas e otimizadas uma única vez (quando são criadas) são executadas mais rapidamente que os comandos SQL enviados pelas aplicações. SP s podem economizar tempo de desenvolvimento e manutenção de sistemas pois as sp s podem ser compartilhadas por todas as aplicações existentes. A manutenção é mais fácil porque é possível alterar uma sp sem ter que alterar e\ou recompilar cada aplicação cliente. Ganho de velocidade de processamento pois geralmente o servidor é uma das máquinas mais poderosas na rede. SP s são muito úteis para efetuar tarefas de processamento periódico e complexo, como processamentos de fechamento de mês. Pág. 1

3. Praticando 3.1. Exemplo 1: Criar e executar uma procedure Execute no SQL SERVER todos os passos abaixo: comando USE PUBLICAÇÕES (na janela de query para indicar o BD) ou SELECIONAR O BANCO PUBLICAÇÕES antes de abrir a janela de query Na janela de query digite: CREATE PROCEDURE SP_Atualiza_preço_10 UPDATE LIVRO SET PREÇO=PREÇO*1.10 Clicar no botão EXECUTE para gravar a procedure Localize a procedure criada e armazenada no BD Publicações: PUBLICAÇÕES Executar a procedure: (na janela de query) EXEC Atualiza_preço_10 3.2. Exercício 1: Criar e Executar a seguinte procedure (nome SP_Lista_Atualiza): A) Listar todos os livros cadastrados; atualizar a editora dos livros cujo assunto é banco de dados para a editora Maria Jose Editora; listar novamente todos os livros cadastrados. B) Alterar a procedure A: o segundo select deve apresentar apenas título e código editora. Obs.: quando precisar alterar uma procedure, abra uma janela de query e digite: ALTER PROCEDURE NOME_DA_PROCEDURE comandos (comandos = todos os comandos da procedure) Pág. 2

3.3. Exemplo 2: Criar e executar uma procedure com PARAMETRO de ENTRADA Execute no SQL SERVER todos passos abaixo: USE LIVROS / OU SELECIONAR O BANCO LIVROS ANTES @NOME_PARÂMETRO TIPO CREATE PROCEDURE SP_Atualiza_preço @taxa real UPDATE LIVRO SET PREÇO=PREÇO+(PREÇO*@taxa/100) EXEC SP_Atualiza_preço Mensagem de ERRO: Msg 201, Level 16, State 4, Procedure Atualiza_preço, Line 0. O procedimento ou a função 'Atualiza_preço' espera o parâmetro '@taxa', que não foi fornecido. Por que ocorreu a mensagem de erro acima? EXEC SP_Atualiza_preço 5 Mensagem: (5 row(s) affected) 3.4. Exemplo 3: Excluir uma procedure Execute: DROP PROCEDURE Atualiza_preço_10 3.5. Exercício 2: MULTIPLOS PARÂMETROS 3.5.1. Criar uma procedure para aumentar os preços dos livros conforme a taxa e o assunto fornecidos através de parâmetros. Obs.: - uma vírgula deve separar cada definição de parâmetro da outra. - No comando de execução (EXEC) o parâmetro assunto (CHAR) pode ser fornecido com ou sem aspas. Execute a procedure com EXEC. 3.5.2. Criar uma procedure para excluir livros conforme o assunto (sigla) e a editora (código) fornecidos. Execute a procedure com EXEC. Pág. 3

3.6. Exemplo 4: Conforme foi dito, as SP também possuem estruturas típicas das linguagens de programação, tais como IF e WHILE. Obs.: se houver mais de um comando dentro do if/else ou do while, tais comandos deverão estar envolvidos por begin\end). Exemplo utilizando IF: create procedure SP_UpdatePreço_DeleteLivro @opcao char(1) as begin if @opcao='u' update livro set preço=preço-(preço*10/100) if @opcao='d' delete from livro where preço<40 end Execute a procedure com EXEC. GATILHOS (Trigger) 1. Introdução Um gatilho (trigger) é um tipo especial de stored procedure. Um gatilho (trigger) também executa um conjunto de comandos. A principal diferença em relação às procedures comuns está no fato dos gatilhos serem automaticamente executados sempre que um determinado evento (inclusão, alteração e exclusão) ocorrer no BD. Gatilhos (trigger s) somente são executados automaticamente, ou seja, não podemos executá-las através do comando EXEC. Uma trigger é sempre associada a uma tabela, entretanto, os comandos que formam a trigger podem acessar dados de outras tabelas do mesmo banco. Principal aplicação: INCLUIR REGR DE NEGÓCIO NO BANCO DE DADOS. 2. Praticando Vamos entender os detalhes na prática. Execute no SQL SERVER todos os passos abaixo. 2.1. Exemplo 1: Suponha que não desejamos ter novos cadastramentos de livros da editora Mirandela (código 1). Criando a trigger (Atenção! Será criada, mas NÃO faz o que se deseja) CREATE TRIGGER TR_SemMirandela ON livro FOR INSERT IF EXISTS(SELECT * FROM INSERTED WHERE EDITORA=1) PRINT 'Atenção! PROIBIDO INCLUIR LIVRO DE MIRANDELA EDITORA' Pág. 4

Localizando a trigger: Trigger relacionada à tabela Testando a trigger: INSERT INTO LIVRO(CODIGO,TÍTULO,PREÇO,SUNTO,EDITORA) VALUES(100,'Java em 5 minutos',10,'p',1) Resultado que obtido: PROIBIDO INCLUIR LIVRO DE MIRANDELA EDITORA (1 row(s) affected) Qual será o estado da tabela livro agora? O livro da Mirandela foi incluído? SELECT * FROM LIVRO 2.2. Exemplo 2: No exemplo 1, a simples mensagem de proibição não garante que novos livros da Mirandela Editora não serão cadastrados. Desejamos impedir a inclusão de novos livros desta editora (código 1). Alterando a trigger: ALTER TRIGGER TR_SemMirandela ON LIVRO FOR INSERT IF EXISTS(SELECT * FROM INSERTED WHERE EDITORA=1) PRINT 'INSERCAO CANCELADA. NÃO PERMITIDO LIVRO DE MIRANDELA' ELSE PRINT 'INCLUSAO CONFIRMADA' Testando a trigger: INSERT INTO LIVRO(CODIGO,TÍTULO,PREÇO,SUNTO,EDITORA) VALUES(101,'C# em 5 minutos',10,'p',1) Resultado que obtido: INSERCAO CANCELADA. NÃO PERMITIDO LIVRO DE MIRANDELA Msg 3609, Level 16, State 1, Line 1 A transação foi encerrada no disparador. O lote foi anulado. Pág. 5

Qual será o estado da tabela livro agora? O livro da Mirandela foi incluído? SELECT * FROM LIVRO 2.3. Exemplo 3: Vamos supor que, por algum motivo gerencial\administrativo, a direção da livraria deseja, no momento, IMPEDIR que sejam feitas exclusões na tabela livro. Devemos criar uma trigger para realizar este controle. Criando a trigger: CREATE TRIGGER TR_NãoExcluiLivro on LIVRO FOR DELETE IF EXISTS(SELECT * FROM DELETED) PRINT 'A TABELA LIVRO ESTÁ BLOQUEADA PARA EXCLUSÃO' Testando a trigger: DELETE FROM LIVRO WHERE CODIGO=3 Resultado que obtido: A TABELA LIVRO ESTÁ BLOQUEADA PARA EXCLUSÃO Msg 3609, Level 16, State 1, Line 1 A transação foi encerrada no disparador. O lote foi anulado. Qual será o estado da tabela livro agora? O livro de código 3 foi excluído? SELECT * FROM LIVRO Agora tente excluir o livro de código 3 graficamente (abra a tabela, selecione a linha do livro 3 e tecle <delete> e confirme. Qual o resultado? 2.4. Exercício: Descreva a função da trigger definida abaixo. CREATE TRIGGER TR_Exercicio on EDITORA FOR INSERT DECLARE @NomeEditora varchar(30) IF EXISTS(SELECT * FROM INSERTED) SET @NomeEditora=(SELECT NOME FROM INSERTED) PRINT 'TB EDITORA BLOQUEADA PARA INCLUSÃO.TENTATIVA DE INCLUSAO: ' + @NomeEditora Resposta: Que mensagem o comando abaixo apresentará? INSERT INTO EDITORA(CODIGO,NOME) VALUES(6,'SARAIVA') Resposta: Pág. 6

2.5. A Trigger abaixo impede alterações de linhas da tabela Livro que tenham na coluna editora o código 1 (Mirandela). CREATE TRIGGER TR_SemAlteraçãoMirandela ON livro FOR UPDATE IF EXISTS(SELECT editora FROM DELETED WHERE editora=1) PRINT 'Não permitido alteração da editora 1 (Mirandela)' Pág. 7