Bases de Dados 2007/2008. Aula 8



Documentos relacionados
António Rocha Nuno Melo e Castro

Bases de Dados 2007/2008. Aula 9

Tarefa Orientada 18 Procedimentos armazenados

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:

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

Hugo Pedro Proença, 2007

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

Tarefa Orientada 20 Cursores

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

Manual do Sistema de Notificação 1

Curso PHP Aula 08. Bruno Falcão

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

DESENVOLVIMENTO DE SOFTWARE

COMANDO DA AERONÁUTICA ESCOLA DE ESPECIALISTAS DE AERONÁUTICA SUBDIVISÃO DE ADMISSÃO E DE SELEÇÃO

A linguagem SQL

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

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Informática de Gestão 1º ano / 1º semestre Ano letivo: 2014/2015. Visual Basic VBA

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

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

Laboratório 4. Base de Dados II 2008/2009

Introdução à linguagem SQL

Programação Orientada a Objetos (DPADF 0063)

Oracle PL/SQL Overview

Linguagem de Consulta - SQL

SQL. Autor: Renata Viegas

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

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Linguagem SQL Parte I

Oracle 10g: SQL e PL/SQL

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

Projeto de Banco de Dados

Introdução à Programação. Armazenamento de Grande Quantidade de Informação Usando Vetores

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

Bem-vindo ao tópico sobre consultas no SAP Business One.

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.

PHP INTEGRAÇÃO COM MYSQL PARTE 1

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

XPontos. Manual de Instruções

INTRODUÇÃO À LINGUAGEM C++

Logado no OracleXE vamos acessar a opção:

Procedimentos armazenados

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

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

Tarefa Orientada 19 Triggers

Estrutura Condicional C++

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

UNIDADE 6 - PROGRAMAÇÃO MODULAR

Abertura do Ano. Este documento pretende auxiliar na Abertura do Ano nos diversos Módulos do software Primavera.

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

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

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

PROGRAMA. Aquisição dos conceitos teóricos mais importantes sobre bases de dados contextualizados à luz de exemplos da sua aplicação no mundo real.

Algoritmos e Programação

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

Linguagem SQL (Parte I)

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

PAINEL DE ADMINISTRADOR

Gestor de Janelas Gnome

LINGUAGEM C. Estrutura básica de um programa

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

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

INE Banco de Dados II. Sumário

Programação SQL. Introdução

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

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

Banco de Dados. Profª. Ana Leda


Tarefa Orientada 15 Manipulação de dados

Linguagem SQL - Structured Query Language

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

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

Tarefa Orientada 16 Vistas

Structured Query Language (SQL)

Linguagem de Consulta - SQL

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

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

Laboratório 3. Base de Dados II 2008/2009

Linguagem SQL - Structured Query Language

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

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Stored Procedures. Renata Viegas

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

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

Programação com Acesso a Banco de Dados

Structured Query Language (SQL) Aula Prática

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

Linguagem PL/SQL e Triggers

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

Bases de Dados. DML Data Manipulation Language Parte 1

Apostila Delphi V 1.0

Modelo Cliente/Servidor Por HIARLY ALVES

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

Programação Engenharia Informática (11543) 1º ano, 1º semestre Tecnologias e Sistemas de Informação (6619) 1º ano, 1º semestre

PL/pgSQL por Diversão e Lucro

Transcrição:

Bases de Dados 2007/2008 Aula 8 1. T-SQL 2. VARIÁVEIS 3. CURSORES 4. PROCEDIMENTOS 5. 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/~hugomcp/bd2/t06.pdf (cursores) 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 Linguagem T- SQL 1.1 Mecanismos de controlo da linguagem T- SQL A linguagem T-SQL possui alguns mecanismos de controlo: e, BREAK, CONTINUE, GOTO, IF e ELSE,, WAITFOR e WHILE. De seguida são apresentados vários exemplos da sua aplicação: IF Exemplo de Execução Condicional IF @ano = 2007 INSERT INTO ano_actual VALUES (@ano) INSERT INTO ano_anterior VALUES(@ano-1) ELSE PRINT 'Ano Errado' WHILE WHILE @contador < 100 PRINT 'contador = ' + CONVERT(VARCHAR(10), @contador) if @contador=10 BREAK BREAK CONTINUE WHILE @contador < 100 PRINT 'contador = ' + CONVERT(VARCHAR(10), @contador) IF @contador > 10 BREAK ELSE CONTINUE

GOTO WAITFOR ; SET @contador = 1; WHILE @contador < 10 PRINT @contador IF @contador = 3 GOTO posicao_1 IF @contador = 4 GOTO posicao_0 posicao_0: PRINT 'Nunca mostra esta mensagem!' posicao_1: PRINT 'Posicao_1!' while @contador < 10 PRINT @contador WAITFOR DELAY '00:00:01' while @contador < 20 IF @contador = 10 PRINT 'Chegou ao ' + CONVERT(VARCHAR(10), @contador) PRINT @contador Todos os identificadores usados em T-SQL têm que começar com uma letra. As variáveis começam sempre com @. Todos os valores do tipo caracter, string ou data têm que ser indicados entre plicas. Os comentários podem ser incluídos entre os símbolos /* e */ quando englobam várias linhas, ou então após -- quando o comentário é apenas uma linha. 2 Variáveis Em T-SQL as variáveis são declaradas através da instrução DECLARE. Estas podem ser locais ou globais. As variáveis globais variáveis do sistema não podem ser criadas pelo utilizador. Estas distinguem-se das locais pois são iniciadas por dois símbolos @. Sintaxe DECLARE { @local_variable [] data_type, [ n] } Exemplo Declare @Data DATETIME, @idade NUMERIC(2), @nome VARCHAR(25), @Controlador NUMERIC(2) Exemplos variáveis globais -- mostra data versão instalada e tipo de processador SELECT @@version

/*@@ROWCOUNT mostra o número de registos afectados por uma instrução INSERT, DELETE, UPDATE ou SELECT*/ UPDATE empregado SET cargo = 'Director' WHERE num = 1 IF @@ROWCOUNT = 0 PRINT 'Não foi actualizado'; GO /* @@ERROR mostra o número do erro da última instrução executada, ou zero se não existir */ UPDATE pessoa SET nome = 1 WHERE morada = 'covilha' IF @@ERROR <> 0 PRINT 'Erro' GO Exemplo atribuição de valores DECLARE @contador INT SET @contador = 10 WHILE @contador > 0 PRINT 'O contador está com ' + CONVERT(VARCHAR(10), @contador) SET @contador = @contador - 1 Exemplo atribuição de valores DECLARE @nome varchar(50), @apelido varchar(50) SELECT @nome = nome, @apelido = apelido FROM empregado WHERE num = 1 Exemplo atribuição de valores DECLARE @nome varchar(50), @apelido varchar(50) SELECT @nome = nome, @apelido = apelido FROM empregado Na situação em que se obtém dados de mais do que um registo as variáveis ficam com o último valor. 3 Cursores Para permitir aceder e manipular todos os registos devolvidos por uma instrução SQL, recorremos a cursores. Estes permitem percorrer os registos obtidos de um modo semelhante a uma lista possibilitando posicionar o cursor em qualquer um dos registos. Para utilizar esta funcionalidade são necessários os seguintes passos: 1. Declarar variáveis para guardar os valores devolvidos pelo cursor. 2. Declarar um cursor com o comando DECLARE e associa-lo à instrução SELECT pretendida 3. Activar o cursor através do comando OPEN para executar o SELECT e abrir o cursor 4. Utilizar as instruções de posicionamento do cursor com FETCH

5. Fechar o cursor com a instrução CLOSE. 6. Para libertar espaço na memória utilizar a instrução DEALLOCATE caso não pretenda usar novamente o cursor. A variável @@Fetch_Status permite testar o estado do cursor (se for diferente de zero, ocorreu um erro). As instruções de posicionamento do cursor são: FETCH FIRST avança para o primeiro registo do cursor. FETCH NEXT avança para o registo seguinte. FETCH PRIOR avança para o registo anterior. FETCH LT avança para o último registo do cursor. FETCH ABSOLUTE n avança para posição n do cursor. FETCH RELATIVE n avança n registos a partir do registo actual do cursor. Para utilizar os comandos de fetch (com excepção do NEXT) é necessário declarar um cursor do tipo SCROLL. Sintaxe DECLARE cursor_name CURSOR [FORWARD_ONLY SCROLL] [LOCAL GLOBAL] FOR select_statement [FOR UPDATE [OF column_name [,...n]]] Exemplo --declarar cursor DECLARE novo_cursor CURSOR FOR SELECT num, nome FROM pessoa -- declarar variáveis locais Declare @num int, @nome varchar(50) -- abrir um cursor OPEN novo_cursor -- retirar valores para uma lista de variáveis FETCH NEXT FROM novo_cursor INTO @num, @nome WHILE @@FETCH_STATUS = 0 PRINT @num PRINT @nome FETCH NEXT FROM novo_cursor INTO @num, @nome -- fechar o cursor CLOSE novo_cursor -- terminar utilização do cursor DEALLOCATE novo_cursor 4 Procedimentos Em T-SQL os procedimentos armazenados são criados Sintaxe CREATE PROC[EDURE] nome_do_procedimento [;versão] [ {@parâmetro tipo_de_dados} [= default] [OUTPUT] ] instruções_sql [...n]

Exemplo CREATE PROC novo_select SELECT * from pessoa; Nesta situação temos um procedimento muito simples para mostrar o resultado do select. Exemplo com passagem de parâmetros CREATE PROC novo_utilizador @num int, @nome VARCHAR(20), @funcao VARCHAR(20) INSERT INTO utilizadores(num,nome,cargo) VALUES(@num,@nome,@funcao); Nesta situação temos três variáveis que são usadas para inserir dados na tabela pessoa. Exemplo com devolução de parâmetros CREATE PROC numero_inscritos @num int OUTPUT SELECT @num = (SELECT COUNT(*) FROM utilizadores) Nesta situação utilizamos apenas um parâmetro para devolver um valor. Exemplo de execução do procedimento anterior DECLARE @num_insc int EXECUTE numero_inscritos @num = @num_insc OUTPUT SELECT @num_insc Outro exemplo com passagem e devolução de parâmetros CREATE PROC mostra_salario @numfunc int, @salario_empregado int OUTPUT SELECT @salario_empregado = salario FROM empregado WHERE numfunc = @numfunc IF @@ROWCOUNT=1 SET @salario_empregado=0 1 GO Nesta situação temos duas variáveis numfunc e salario_empregado. Estas são usadas para indicar o salário do empregado com o numfunc fornecido (INPUT), o salário_empregado (OUTPUT) é usado para passar para fora o resultado correspondente ao funcionário indicado. Se for encontrado um registo devolve o resultado senão devolve 0 com um erro através do 1 Exemplos de execução do procedimento anterior DECLARE @salario INT EXEC mostra_salario 123, @salario_empregado = @salario OUTPUT PRINT @salario 5 Exercícios 5.1 Criar uma base de dados para armazenar informação sobre notas de alunos com os seguintes campos numaluno, nomealuno, moradaaluno, coddisc, nomedisc, notadisc, não se esqueça de incluir todas as restrições que achar necessárias. 5.2 Criar o procedimento insere_disciplina para inserir novas disciplinas. 5.3 Criar o procedimento insere_aluno para inserir novos alunos. 5.4 Criar o procedimento insere_nota para inserir as notas dos alunos. 5.5 Criar o procedimento melhor_nota para mostrar a melhor nota de uma disciplina

5.6 Criar o procedimento melhor_disciplina que deve devolver o código da disciplina com a melhor média. 5.7 Criar o procedimento alterar_nota para alterar a nota de um aluno a uma disciplina. 5.8 Criar um procedimento media_disciplina para mostrar a média das notas a todas as disciplinas. 5.9 Criar um procedimento curriculum_aluno para mostrar as notas obtidas pelo aluno sendo o resultado visualizado do seguinte modo Ex: Curriculum ======== aluno nº 1234 Carlos Patrício Cód Disciplina Nota 1 Matemática 10 2 Física 18 3 Português 10 ========