Bases de Dados 2007/2008. Aula 9



Documentos relacionados
Bases de Dados 2007/2008. Aula 8

Tarefa Orientada 19 Triggers

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

Tarefa Orientada 18 Procedimentos armazenados

trigger insert, delete, update

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

Sistemas de Informação

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

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

Tarefa Orientada 15 Manipulação de dados

Hugo Pedro Proença, 2007

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

António Rocha Nuno Melo e Castro

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

A linguagem SQL

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

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

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

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

Tarefa Orientada 16 Vistas


DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

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

Os dados no MySQL são armazenado em tabelas. Uma tabela é uma colecção de informação relacionada e consiste em colunas e linhas.

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

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

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Programação SQL. Introdução

SQL Gatilhos (Triggers)

SQL - Criação de Tabelas

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

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

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

Histórico de revisões

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Comandos de Manipulação

O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros:

SQL. Autor: Renata Viegas

Tarefa Orientada 17 Scripts

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

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

Bases de Dados. Lab 1: Introdução ao ambiente

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

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

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

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

PL/pgSQL por Diversão e Lucro

O que são Bancos de Dados?

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

Projeto de Banco de Dados: Empresa X

Bases de Dados 2005/2006. Aula 5

Exemplos de Gatilhos. Prof. Márcio Bueno

EXEMPLOS DE COMANDOS NO SQL SERVER

Sumário Introdução Breve História da Linguagem SQL l 0.3 Características da Linguagem SQL A Composição deste Livro 3

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

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

PROGRAMA. Objectivos Gerais :

SQL (Structured Query Language)

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

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

Programação Orientada a Objetos JDBC Java Database Connectivity

Structured Query Language (SQL) Aula Prática

Principais Comandos SQL Usados no MySql

Bases de Dados 1º semestre

Banco de Dados. Prof. Antonio

Consistem num conjunto de apontadores para instâncias especificas de cada relação.

Material. Fornecedor

EXAME DE 1ª ÉPOCA Semestre de Verão 2004/ Junho 2005 duração: 2h30m

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

Oracle 10g: SQL e PL/SQL

Manual do Sistema de Notificação 1

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

Esquema da Relação. Modelo Relacional. Instância da Relação. Exemplo. Uma base de dados é uma colecção de uma ou mais relações com nomes distintos

4.6. SQL - Structured Query Language

Integrando Java com Banco de Dados

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

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

SQL (Structured Querie Language) Escola Secundária de Emídio Navarro 2001/2002 Estruturas, Tratamento e Organização de Dados

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

Manipulação de Banco de Dados com Java 1. Objetivos

SQL (Structured Query Language)

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

SQL (Structured Query Language)

Projeto de Banco de Dados

Bancos de Dados I. Integridade semântica

ADMINISTRAÇÃO DE BANCO DE DADOS

SQL (Structured Query Language)

Linguagem SQL (Parte II)

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

Prof. Carlos Majer Aplicações Corporativas UNICID

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Transcrição:

Bases de Dados 2007/2008 Aula 9 1. T-SQL TRY CATCH 2. TRATAMENTO ERROS RAISERROR 3. TRIGGERS 4. EXERCÍCIOS Sumário Referências http://msdn2.microsoft.com/en-us/library/ms189826.aspx (linguagem t-sql) http://www.di.ubi.pt/~pprata/bd/bd0405-proc.sql (procedimentos) http://www.di.ubi.pt/~hugomcp/bd2/t05.pdf (procedimentos) http://www.di.ubi.pt/~pprata/bd/bd0405-triggers.sql (triggers) http://doc.ddart.net/mssql/sql70/create_8.htm (triggers) http://www.java2s.com/code/sqlserver/catalogsqlserver.htm (exemplos vários) SQL Server 2000 para Profissionais, Orlando Belo, FCA ISBN 972-722-505-5 SQL - Structured Query Language, Luís Manuel Dias Damas, FCA ISBN 972-722-443-1 1 Try Catch Processamento de erros e excepções em T-SQL Os erros podem ser processados usando blocos de instruções TRY e CATCH semelhante aos utilizados em outras linguagens como Java e C. Temos então dois blocos, o bloco TRY e o bloco CATCH. Quando um erro é detectado no interior do bloco TRY o controlo é passado para o bloco CATCH onde o erro pode ser processado. O bloco TRY começa com a instrução e termina com. Um bloco CATCH começa com e termina com. { sql_statement statement_block } { sql_statement statement_block } No exemplo seguinte temos duas instruções SELECT intercaladas por um cursor não declarado no bloco TRY. A execução vai gerar um erro no cursor não executando o último select e passando a execução para o bloco CATCH. SELECT 'Apareceu!!!' AS aparece -- erro de cursor não declarado open CursorXPTO; SELECT 'Este select já não aparece!!!' AS escondida IF ERROR_NUMBER() = 16916 Print 'Erro, o cursor não está declarado' ; As funções do SGBD que disponibilizam informação sobre erros no âmbito de instruções TRY e CATCH são os seguintes: ERROR_NUMBER() indica o número do erro encontrado. ERROR_SEVERITY() mostra a gravidade do erro. Erros com gravidades entre 11 e 16 podem ser corrigidos pelo utilizador.

ERROR_STATE() ERROR_PROCEDURE() ERROR_LINE() ERROR_MESSAGE() mostra o estado do erro. mostra o nome do procedimento ou trigger onde o erro ocorreu. mostra o número da linha onde ocorreu o erro. mostra a descrição completa do erro. Exemplos de tipos de erros referenciados por ERROR_NUMBER() 16905 abertura de um cursor já aberto 16917 acesso a um cursor que não está aberto 8134 divisão por zero 16916 acesso a um cursor que não declarado Exemplo erro divisão por zero que é passado para o CATCH. -- provocar uma divisão por zero SELECT 1/0; SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; ; Resultado obtido 8134 16 1 NULL 3 Divide by zero error encountered. 2 RAISERROR O Raiserror permite gerar excepções. No caso de a gravidade do erro estar compreendida entre 11 e 16 a excepção pode ser processada pelo Catch. Este pode também ser usado para enviar as mensagens de erro a aplicações clientes. Exemplo com inserção de valores que violam uma restrição UNIQUE previamente definida, sendo gerado neste caso uma mensagem de erro. DECLARE @num INT SET @num=1 WHILE @num < 20 BEGIN INSERT INTO aluno VALUES (300,'Ana','Covilhã') SET @num = @num+1 END SELECT 'Não se vê este select' SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage; RAISERROR 2147483647 'Violação da restrição UNIQUE KEY da constraint morada'; select * from aluno Exemplo com erro na actualização que violam uma restrição previamente definida. INSERT INTO aluno VALUES (1,'Pedro','covilhã')

INSERT INTO aluno VALUES (2,'Ana','covilhã') UPDATE aluno SET numaluno= 100 WHERE morada='covilhã' DECLARE @erro NVARCHAR(1000); DECLARE @severidade INT; DECLARE @estado INT; SET @erro = ERROR_MESSAGE(); SET @severidade = ERROR_SEVERITY(); SET @estado = ERROR_STATE(); RAISERROR ( @erro, @severidade, @estado) 3 Triggers Um Trigger é um objecto que é associado a uma tabela na base de dados. Em muitos aspectos, é semelhante a um procedimento armazenado, sendo desencadeado automaticamente quando ocorrem determinadas condições pré estabelecidas (operações do tipo INSERT UDATE e DELETE). CREATE TRIGGER trigger_name ON { ALL SERVER DATABASE } [ WITH <ddl_trigger_option> [,...n ] ] { FOR AFTER } { event_type event_group } [,...n ] AS { sql_statement [ ; ] [...n ] EXTERNAL NAME < method specifier > [ ; ] } Podemos aceder aos valores que estão a ser modificados por um trigger através do acesso às tabelas: Inserted e Deleted. Estas duas tabelas são processadas do mesmo modo que as tabelas da base de dados. Deve salvaguardar o facto que não se pode alterar o seu conteúdo. Exemplo de um Trigger que escreve uma string antes de executar uma inserção na ta bela aluno. CREATE TRIGGER alerta ON aluno FOR INSERT AS PRINT 'Iniciar introdução de novos alunos' Exemplo de um Trigger que não permite apagar os registos da tabela aluno utilizando ROLLBACK TRAN para cancelar a operação de DELETE efectuada inicialmente. DELETE FROM aluno WHERE numaluno > 2 /* -- criar o trigger e comentar novamente CREATE TRIGGER anulatransaccao ON aluno FOR DELETE AS BEGIN ROLLBACK TRAN PRINT 'Não permito DELETE nesta tabela.' END */ GO Exemplo de uma inserção através de um procedimento armazenado. Esta desencadeia através de um trigger a escrita da data da inserção na primeira tabela na segunda. /* --criar as tabelas o procedimento e o trigger primeiro e depois comentar CREATE TABLE tabela1 (num INT) CREATE TABLE tabela2 (data DATETIME) CREATE PROC ins @num int AS INSERT INTO tabela1 VALUES (@num)

CREATE TRIGGER noc ON tabela1 FOR INSERT AS INSERT INTO tabela2 VALUES (GETDATE()); RAISERROR 13122 'inserido valor na tabela 1 directamente e inseri data na outra tabela usando o trigger'; */ exec ins 1; select *from tabela1; select *from tabela2; Para detectar a acção a realizar pode ser necessário verificar quais as tabelas (inserted, deleted) é que têm registos. É possível também verificar se um determinado campo foi alterado ou inserido através da função UPDATE() Ex. IF UPDATE (ArtigoID)... Apagar um trigger DROP TRIGGER <nome_trigger>; Activar um trigger ENABLE TRIGGER {trigger_name [,...n ] ALL } ON { object_name DATABASE ALL SERVER } [ ; ] Exemplo da activação de um Trigger ENABLE TRIGGER omeutrigger ON aluno Desactivar um trigger DISABLE TRIGGER {trigger_name [,...n ] ALL } ON { object_name DATABASE ALL SERVER } [ ; ] Exemplo da desactivação de um Trigger DISABLE TRIGGER omeutrigger ON aluno 4 Exercícios 4.1 Alterar os exercícios seguintes de modo a incluir o processamento de erros com TRY e CATCH e RAISERRROR nos exercícios efectuados na aula passada: 4.2 Criar o procedimento insere_disciplina para inserir novas disciplinas. 4.3 Criar o procedimento insere_aluno para inserir novos alunos. 4.4 Criar o procedimento insere_nota para inserir as notas dos alunos. 4.5 Criar o procedimento melhor_nota para mostrar a melhor nota de uma disciplina. 4.6 Criar o procedimento melhores_notas para mostrar as melhor nota de todas as disciplinas. 4.7 Criar o procedimento para pior_nota para mostrar a pior nota de uma disciplina. 4.8 Criar o procedimento melhor_disciplina que deve devolver o código da disciplina com a melhor média.

4.9 Criar o procedimento alterar_nota para alterar a nota de um aluno a uma disciplina. 4.10 Criar um procedimento media_disciplina para mostrar a média das notas a todas as disciplinas. 4.11 Criar uma tabela de inscrição dos alunos na escola, nesta deve incluir a data (datetime) e estabelecer a ligação à tabela alunos. 4.12 Faça um trigger para quando efectuar uma inscrição mostre o número de alunos existentes na escola. 4.13 Faça um trigger que preencha o registo na tabela de inscrição automaticamente usando os dados da tabela alunos. 4.14 Faça um trigger para mostrar um alerta sempre que uma disciplina tenha média negativa. 4.15 Faça um trigger para cancelar os registos efectuados na tabela disciplinas que não respeitem as regras de preenchimento. Estas regras são as seguintes: Disciplinas do 1ºano começam com 1 até 199, as do 2ºano começam no 200 e terminam no 299 e as do 3º ano começam no 300 e terminam no 399, todos os outros códigos são para serem ignorados. 4.16 Faça um trigger para alertar automaticamente sempre que uma disciplina tenha mais de 5 alunos com mais de 18 valores. 4.17 Faça um trigger para alertar quando o número de alunos da Covilhã atinja 30%.