António Rocha Nuno Melo e Castro



Documentos relacionados
Bases de Dados 2007/2008. Aula 8

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

Hugo Pedro Proença, 2007

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

Oracle PL/SQL Overview

Bases de Dados 2007/2008. Aula 9

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

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

Oracle 10g: SQL e PL/SQL

SQL Procedural. Josino Rodrigues Neto

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

Logado no OracleXE vamos acessar a opção:

Tarefa Orientada 20 Cursores

Projeto de Banco de Dados

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

Tarefa Orientada 18 Procedimentos armazenados

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

Bancos de Dados I. Integridade semântica

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

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

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

Programação SQL. Introdução

Sistemas de Informação

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

Tarefa Orientada 19 Triggers

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE

SQL consulta com operadores


PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Structured Query Language (SQL)

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

SQL Gatilhos (Triggers)

A linguagem SQL

trigger insert, delete, update

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

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

Linguagem SQL (Parte I)

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

Tarefa Orientada 10 Obter informação a partir de uma tabela

Manual do Sistema de Notificação 1

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

Programação com ODBC 3

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

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

PL/pgSQL por Diversão e Lucro

Principais Comandos SQL Usados no MySql

INE Banco de Dados II. Sumário

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.

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

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


CIÊNCIA E TECNOLOGIA DO RIO

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

Tarefa Orientada 16 Vistas

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

JSP - ORIENTADO A OBJETOS

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

António Rocha Nuno Melo e Castro

SQL. Autor: Renata Viegas

Bases de Dados 2005/2006. Aula 5

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

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

Linguagem SQL Parte I

Treinamento em PHP. Aula 7. Ari Stopassola Junior

Variáveis e estruturas de controlo. Introdução à Programação André L. Santos

Comandos de Manipulação

Monitoria GDI Aula Prática. DML + PL/SQL parte 1

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

MYSQL BÁSICO. 12 Horas Instrutor: Antonio Itamar Júnior

Operação de União JOIN

Consultoria e Treinamento em Bancos de Dados Relacionais

EXEMPLOS DE COMANDOS NO SQL SERVER

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

O que é o JavaScript?

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

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

Linguagem PL/SQL e Triggers

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

Comandos DDL. id_modulo = id_m odulo

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

SQL (Structured Query Language)

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

O código JavaScript deve ser colocado entre tags de comentário para ficar escondido no caso de navegadores antigos que não reconhecem a linguagem.

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

Linguagem de Consulta Estruturada (SQL)

PROGRAMA. Objectivos Gerais :

SQL Structured Query Language

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

SQL Server - Arquitectura Cliente/Servidor

Introdução ao SQL. Aécio Costa

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

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

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

Transcrição:

António Rocha Nuno Melo e Castro

! Transact-SQL (T-SQL) Extensão ao SQL Permite controlo do fluxo de execução Permite comandos DDL (contrariamente ao PLSQL) T-SQL combina: poder de manipulação de dados do SQL com poder de processamento das linguagens procedimentais

#$%#$ Variáveis Tipos de dados escalares Controlo do fluxo de execução Funções integradas Gestão de cursores Processamento de excepções Código armazenado na base de dados "

'%( A unidade de programação é semelhante ao já visto para PL/SQL, podendo ter: Blocos de código sem nome scripts. Normalmente são construídos dinamicamente e executados apenas uma vez. Blocos com nome Procedures e functions - são guardados na BD. Este blocos normalmente não são alterados depois de construídos e são executados várias vezes. Os subprogramas são executados explicitamente via uma chamada a um procedure ou function. Triggers: São também guardados na BD. Este blocos normalmente não são alterados depois de construídos e são executados várias vezes. Os Triggers são executados implicitamente quando acontecem determinados eventos na BD (Insert, Update e Delete) &

'%( DECLARE --Definição de variáveis. BEGIN --Acções executáveis END Contrariamente ao PL/SQL, não existe propriamente o conceito de bloco. Um bloco em T/-SQL é um script. Os elementos BEGIN e END não são obrigatórios e delimitam o conjunto de acções a efectuar. Como não existe o conceito de bloco, DECLARE não define uma secção de declaração de variáveis. É opcional e é utilizada para definir objectos de T-SQL, tais como as variáveis. É possível também ter tratamento de excepções, e definir acções a tomar quando estas ocorrem. Contrariamente ao PL/SQL não é necessário terminar as instruções com ponto e vírgula. )

*+ Syntax DECLARE DECLARE { @local_variable [AS] data_type, [ n] } Declare @DataNasc DATETIME, @idade NUMERIC(2), @nome VARCHAR(50), @Controlador NUMERIC(2), @valido BIT

*+,$ Contrariamente ao PL/SQL, o T-SQL não permite no momento da definição: Inicializar Ter defaults Constantes Definir tipos de dados com base no tipo de outras variáveis Definir tipos de dados com base na estrutura de uma tabela

%-,%$(.%$ O T-SQL tem o conceito de variáveis globais: Não podem ser definidas pelo utilizador, são do sistema Distinguem-se das locais por terem no início os símbolos @@. Ex. SELECT @@VERSION

Muito semelhante ao já visto para o PL/SQL: As instruções podem, se necessário, passar de uma linha para a outra, mas as palavras-chave não podem ser divididas. As unidades léxicas (identificadores, operadores, etc) podem ser separadas por um ou mais espaços ou por outros limitadores que não se confundam com a unidade léxica. Não se podem usar palavras reservadas como identificadores, excepto se entre aspas. Os identificadores têm que começar por uma letra e as variáveis locais por @. Os valores literais do tipo caracter ou data têm que ser indicados entre plicas. Os comentários podem ser incluídos entre os símbolos /* e */ quando o comentário engloba várias linhas, ou então após - quando o comentário é apenas uma linha. /

0$.-$%#$ + - * / IS NULL, LIKE, BETWEEN, IN, =, >, <, <>,!=, ^=, <=, >= = + NOT AND OR Adição Subtracção Multiplicação Divisão Comparação Atribuição Concatenação Negação lógica Conjunção Disjunção

%1%$ ( ) ; [] : -- /* */ Expressão ou lista Expressão ou lista Fim de instrução Cadeia de caracteres Identificador Etiqueta Comentário Comentário Comentário

*1%$.2#$ Contrariamente ao PL/SQL o domínio de Y estende-se desde a sua definição até ao final. Não existindo o conceito de bloco, não é possível declarar variáveis com o mesmo nome dentro do mesmo script (mesmo estando declaradas antes de BEGIN END)

$ $# 3 IF-ELSE IF condition1 statement1 ELSE IF condition2 statement2 Para colocar mais do que uma instrução dentro do IF, é ncessário usar o Begin / End IF condition1 begin statement11 statement12 end ELSE IF condition2 statement2 "

0 $1$#4#56 BEGIN...END BREAK GOTO label IF...ELSE RETURN WHILE Other Transact-SQL statements that can be used with control-of-flow language statements are: /*...*/ (Comment) -- (Comment) CASE Keyword DECLARE local_variable Defines a statement block. Exits the innermost WHILE loop. Continues processing at the statement following the label as defined by label. Defines conditional, and optionally, alternate execution when a condition is FALSE. Exits unconditionally. Repeats statements while a specific condition is TRUE. EXECUTE PRINT RAISERROR Description &

# %. %!,$,%-,%$ DECLARE @VNome varchar(50), @VPosto varchar(50) BEGIN SELECT @VNome = Nome, @ VPosto = Posto FROM Empregado WHERE NumEmp = 5 END Caso a query retorne mais do que um registo as variáveis ficam com o valor do último registo seleccionado (não dá erro). Este comando é feito no PL/SQL com o INTO. )

$ Os registos retornados por uma instrução SQL podem ser manipulados através de um cursor. Um cursor é semelhante a uma lista de valores, sendo possível percorrer e posicionar em qualquer um dos registos. Os cursores são semelhantes aos já vistos para o PL/SQL. No entanto o T-SQL tem muito menos possibilidades de tratamento.

$$ #$$%# O processo típico da utilização de um cursor é : 1. Declarar variáveis para guardar os valores retornados pelo cursor 2. Declarar um cursor com o comando Declare e associar-lhe um Select 3. Usar o comando Open para executar o Select e abrir o cursor 4. Utilizar instruções de posicionamento do cursor - Fetch 5. Fechar o cursor com a instrução Close, para libertar a memória dos resultados do cursor, e possivelmente utilizar a instrução Deallocate se não for necessário usar novamente o cursor. @@Fetch_Status - Permite testar o status do fetch, se diferente de zero, ocorreu um erro.

$ 7$$%#%1 Utilizar instruções de posicionamento do cursor 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 Last - 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 (à excepção do Next) é necessário declarar um cursor do tipo SCROLL.

$ $89 Syntax básica: DECLARE cursor_name CURSOR [FORWARD_ONLY SCROLL] [LOCAL GLOBAL] FOR select_statement [FOR UPDATE [OF column_name [,...n]]] Para abrir OPEN nome_cursor Buscar valores FETCH NEXT FROM nome_cursor INTO lista_variaveis Para fechar CLOSE nome_cursor Para retirar o Declare DEALLOCATE nome_cursor /

$ 91 DECLARE Cursor_Cli CURSOR FOR SELECT ClienteID, Nome FROM Clientes Declare @Cli int, @Nome varchar(50) OPEN Cursor_Cli FETCH NEXT FROM Cursor_Cli INTO @Cli, @Nome WHILE @@FETCH_STATUS = 0 BEGIN PRINT @Cli PRINT @Nome FETCH NEXT FROM Cursor_Cli INTO @Cli, @Nome END CLOSE Cursor_Cli DEALLOCATE Cursor_Cli

+%. $# $$%1#%$ Atributos de cursores implícitos: retornam informação sobre o resultado da última instrução INSERT, DELETE, UPDATE ou SELECT executada. São acedidos através de variáveis globais: @@ROWCOUNT retorna o número de registos afectados por uma instrução INSERT, DELETE, UPDATE ou SELECT @@ERROR o número do erro da última instrução executada, ou zero se não existir.

# Sintaxe básica: CREATE PROC[EDURE] procedure_name [;number] [ {@parameter data_type} [VARYING] [= default] [OUTPUT] ] [,...n] AS sql_statement [...n]

# 91 CREATE PROC Cli @CodCli int=null, @InicioNome Varchar(40) AS BEGIN SELECT * FROM CLIENTES WHERE ClienteID > @CodCli AND Nome LIKE (@InicioNome+'%') END Para invocar a procedure EXEC Cli 2, 'A' OU EXEC Cli @InicioNome = 'A', @CodCli=2 "

# 91 ALTER PROC Cli @CodCli int, @InicioNome Varchar(40), @TotalReg int OUTPUT AS BEGIN SELECT @TotalReg = COUNT(*) FROM CLIENTES WHERE ClienteID > @CodCli AND Nome LIKE (@InicioNome+'%') END Para invocar a procedure DECLARE @Tot int EXEC Cli 1, 'A', @TotalReg = @Tot OUTPUT PRINT 'Numero de registos = ' + cast(@tot AS Varchar(10)) &

3 #%$ A utilização de funções é vantajosa em determinadas circunstâncias : Podem ser utilizados para encapsular e centralizar a lógica das regras de negócio. Podem ser utilizadas numa query, contrariamente as Stored procedures e podem ser passados parâmetros, contrariamente às Views. Nos casos em que o resultado é uma tabela, esta pode ser usado na cláusula FROM como uma tabela normal. Nas situações em que o resultado é um único valor, as funções podem ser usadas na cláusula SELECT como uma função normal do SQL. Pode ser usada, por exemplo, para cálculos de valores ou formatação. )

3 #%$ No T-SQL existem 3 tipos de funções: 1. Scalar Functions - São funções que retornam unicamente um valor. Exemplo: CREATE FUNCTION QtStock (@Qt Smallint) RETURNS Smallint AS BEGIN IF @QT<0 SET @Qt = 0 RETURN @Qt END Para invocar : SELECT dbo.qtstock(-3)

3 #%$ 2. Inline Table - São funções que têm como resultado uma tabela de valores que é resultado de uma única instrução de select. Exemplo: CREATE FUNCTION AnivMes (@Mes Tinyint) RETURNS TABLE AS RETURN (SELECT ClienteID, Nome FROM Clientes WHERE Month(DataNasc) = @Mes) Para invocar: SELECT Nome From AnivMes(1)

3 #%$ 3. Multi-statement Table - São funções que retornam tabelas definidas e trabalhadas pelo utilizador. Exemplo: CREATE FUNCTION ArtVendasAno (@Ano Int) RETURNS @VAno TABLE (ArtigoID int, Descricao Nvarchar(40), Vendas Int) AS BEGIN INSERT @VAno SELECT ArtigoID, Descricao, (Select SUM(Quant) FROM Facts, linhasfact WHERE LinhasFact.ArtigoID = Artigos.ArtigoID AND LinhasFact.FactID = Facts.FactID AND @Ano = YEAR(Data)) FROM Artigos RETURN END Para invocar: SELECT * FROM ArtVendasAno(2006) WHERE Vendas > 1