Sei sulla pagina 1di 19

SQL Avan Avanado

Apresenta Apresentao

SQL Avan Avanado

Sobre o instrutor:
Professor no curso de Jogos e Entretenimento Digital da Unisinos e do Instituto de Informtica da Unisinos Gerente de Projetos da empresa Qualit Informtica ltonietto@unisinos.br

Leandro Tonietto ltonietto@unisinos.br www.inf.unisinos.br/~ltonietto jan-07

Expectativa quando ao aproveitamento do curso

SQL Avan Avanado

SQL Avan Avanado

Agenda para 09/12 Introduo Transact-SQL


Elementos de sintaxe

TransactionTransaction-SQL O Transact-SQL uma linguagem de definio, manipulao e controle de dados. Padronizao SQL-92
ISO e ANSI

Implementando Views
Conceitos Criao e modificao Otimizao

Elementos de linguagem de programao


Diretivas, comentrios, identificadores, controle de fluxo, loops, funes, expresses, ...

SQL Avan Avanado

SQL Avan Avanado

Tipos de linguagem para BD DDL - Data Definition Language


Definio do BD: criao, alterao e remoo de campos e tabelas, regras, ndices, ...

Elementos de Linguagem
Diretivas de lotes Comentrios Identificadores Tipos de dados Variveis Funes do sistema Operadores Expresses Controle de fluxo Palavras reservadas

DML - Data Manipulation Language


Manipulao de dados: consulta, incluso, alterao e excluso

Transaction-SQL
Programao de funes auxiliares

SQL Avan Avanado

SQL Avan Avanado

Diretiva de lotes Lote:


Conjunto de instrues de programao SQL Server processa um lote de instrues por vez.

Diretiva de lotes
GO:
Envia lote atual de instrues para execuo O lote atual composto de todas as instrues inseridas desde o ltimo comando GO ou desde o incio da sesso ad hoc (ou script, se esse for o primeiro GO). Os usurios devem seguir as regras referentes a lotes. Por exemplo, algumas instrues de DDL devem ser executadas isoladamente de outras instrues Transact-SQL, separando-as com um comando GO. Escopo das variveis definido dentro de um lote

Diretivas de lote:
so instrues para envio dos lotes para execuo do SGBD Duas instrues: GO e EXEC

SQL Avan Avanado

SQL Avan Avanado

Diretiva de lotes GO:


Exemplo:
/* bloco de comandos 1 */ DECLARE @EmpID varchar(11) GO /* bloco de comandos 2 */ SET @EmpID = Teste
O escopo da vari varivel lote. O lote conjunto instru instrues separadas por GO GOs Sero executados apenas os lotes ap aps o comando GO

Diretiva de lotes EXEC:


Executa comandos do usurio
Comandos TransacSQL Funes Lotes

O que aconteceria se estes blocos de comandos fossem executados?

Comandos so passados por parmetro e o mtodo retorna o status da execuo: sucesso ou erro.

SQL Avan Avanado

SQL Avan Avanado

Coment Comentrios
So cdigos no executveis de um lote de comandos Geralmente utilizados para:
indicar alguma ponto importante de um cdigo colocar explicaes curtas sobre uma funo ou lote Suprimir execuo de linhas de cdigo sem remov-las

Coment Comentrios
Exemplo 1:
USE northwind SELECT productname , (unitsinstock-unitsonorder) -- Calcula inventrio -- , supplierid -- indica ao interpretador de FROM products comando que ignore o estiver sua GO
direita, at at o fim da linha

Comentrio de linha: -Comentrio de bloco: /* ... */

Suprimindo um linha

SQL Avan Avanado

SQL Avan Avanado

Coment Comentrios
Exemplo 2:

Identificadores
So nomes ou identificao nica para variveis e funes Os identificadores padro podem conter de 1 a 128 caracteres, inclusive letras, smbolos (_, @ ou #) e nmeros. No so permitidos espaos. Regras:
O primeiro caractere deve ser um caractere alfabtico, de a-z ou A-Z. Os identificadores podem incluir letras, nmeros ou os smbolos @, $, # ou _ . Os nomes de identificadores que comeam com um smbolo tm utilizaes especiais:
Um identificador que inicie com o smbolo @ indica um parmetro ou varivel local. Um identificador que inicie com um sinal de tralha (#) indica um procedimento ou uma tabela temporria. Um identificador que inicie com um sinal de tralha duplo (##) indica um objeto temporrio global.

/* Este cdigo recupera todas as linhas da tabela products e exibe o preo unitrio, o preo unitrio aumentado em 10% e o nome do produto. */ USE northwind SELECT unitprice, (unitprice * 1.1), productname FROM products GO
Normalmente os coment comentrios de blocos so usados para comentar blocos de linhas de c cdigo e colocar explica explicaes sobre o que executado no lote

Os nomes de objetos temporrios no devem ter mais de 116 caracteres, incluindo os sinais # ou ##, porque o SQL Server atribui um sufixo numrico interno aos objetos temporrios.

SQL Avan Avanado

SQL Avan Avanado

Identificadores Exemplo:
DECLARE @v1 int

Identificadores delimitados Os identificadores delimitados podem ser usados nas seguintes situaes:
Quando os nomes contiverem espaos incorporados Quando forem utilizadas palavras reservadas como nomes de objetos ou partes de nomes de objetos

Os identificadores delimitados devem ser colocados entre parnteses ou aspas duplas.

SQL Avan Avanado

SQL Avan Avanado

Conven Conveno de Nomes de Identificadores


Mantm um padro de escrita Facilita manuteno de cdigo Diretrizes:
Quando possvel, empregue nomes significativos. Use convenes de nomeao simples e fceis. Use um identificador que diferencie tipos de objeto, principalmente para views e procedimentos armazenados. Mantenha a exclusividade dos nomes de objetos e usurios. Por exemplo, evite criar uma tabela sales (vendas) e um cargo sales dentro do mesmo banco de dados.

Tipos de dados Os tipos de dados so atributos que especificam o tipo de informao que pode ser armazenado em uma coluna, parmetro ou varivel Delimita o domnio dos valores possveis para uma varivel, parmetro ou coluna

SQL Avan Avanado

SQL Avan Avanado

Tipos de dados Numricos:


Para representao de nmeros Inteiros: int, tinyint, smallint e bigint Decimais: numeric, decimal, money e smallmoney Ponto flutuante: float e real

Tipos de dados
Numricos:
Para representao de nmeros Inteiros: int, tinyint, smallint e bigint Decimais: numeric, decimal, money e smallmoney Ponto flutuante: float e real

Datas:
Representa datas ou perodos de tempo. Os dois tipos de dados de data so datetime, cuja preciso de 3,33 milissegundos, e smalldatetime, cuja preciso de intervalos de 1 minuto.

SQL Avan Avanado

SQL Avan Avanado

Tipos de dados
Characters
Este tipo de dados usado para representar seqncias ou dados de caractere e inclui tipos de dados de seqncia de tamanho fixo, como char e nchar, e de tamanho varivel, como varchar e nvarchar.

Tipos de dados Unique Identifiers


Este tipo especial de dados um uniqueidentifier que representa um identificador global exclusivo, o qual um valor hexadecimal de 16 bytes que deve ser sempre exclusivo.

Binrios
Este tipo de dados muito semelhante aos tipos de dados de caractere em termos de armazenamento e estrutura, porm o contedo dos dados tratado como uma srie de valores de bytes. Os tipos de dados binrios incluem binary e varbinary. O tipo de dados bit indica um valor de bit nico igual a zero ou um.

SQL Variantes
Este tipo de dados pode representar valores de vrios tipos de dados para os quais h suporte no SQL Server, com exceo de text, ntext, image, timestamp e rowversion.

SQL Avan Avanado

SQL Avan Avanado

Tipos de dados
Image e Text
Estes tipos de dados so estruturas objeto binrio extenso (BLOB) que representam tipos de dados de tamanho fixo e varivel para o armazenamento de dados binrios e de caractere Unicode e noUnicode grandes, como image, text e ntext.

Tipos de dados Definidos pelo usurio


Este tipo de dados criado pelo administrador do banco de dados e se baseia nos tipos de dados do sistema. Use os tipos de dados definidos pelo usurio quando vrias tabelas devem armazenar o mesmo tipo de dados em uma coluna, e voc deve garantir que as colunas tenham exatamente o mesmo tipo de dados, tamanho e nulidade.

Tables
Este tipo de dados pode ser usado apenas para definir variveis locais de tipo de tabela ou o valor de retorno de uma funo definida pelo usurio.

Cursors
Este tipo de dados usado para programao em procedimentos armazenados e com interfaces de cliente de baixo nvel. Ele nunca usado como parte de uma instruo de DDL.

SQL Avan Avanado

SQL Avan Avanado

Vari Variveis
Varivel um recurso de linguagem de programao para definio de identificadores que representam e armazenam um determinado valor na memria. Vrios locais: DECLARE Atribuio de valor feita atravs do comando SET ou da execuo de uma expresso como um SELECT Escopo do lote. Isto significa que? Nome da varivel deve ser precedido por @

Vari Variveis
Sintaxe de uso geral:
DECLARE {@<nome> <tipo_de_dados>} [,...n] SET @nome_da_varivel_local = expresso

Exemplos:
DECLARE @nome varchar(70) DECLARE @soma int SET @soma 0

SQL Avan Avanado

SQL Avan Avanado

Vari Variveis
Exemplo: USE northwind DECLARE @EmpID varchar(11) ,@vlName char(20) SET @vlname = 'Dodsworth' SELECT @EmpID = employeeid FROM employees WHERE LastName = @vlname SELECT @EmpID AS EmployeeID GO

Fun Funes do sistema


O Transac-SQL permite a execuo de funes pr-definidas do sistema, como:
Sum, avg, sqrt, length, ... Consultar guia de referncia para identificar todas as funes

Tipos de funes:
Agem sobre um conjunto de dados e retornam alguma compilao dos mesmos
USE northwind SELECT AVG(unitprice) AS AvgPrice FROM products GO
AVG calcula mdia

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do sistema


Tipos de funes:
Retornam um valor individual que opera a partir de nenhum ou de diversos valores escalares individuais. As funes escalares podem ser agrupadas nas seguintes categorias:
Configurao - Retorna informaes sobre a configurao atual. Cursor - Retorna informaes sobre cursores. Data e hora - Efetua uma operao sobre um valor inserido de data e hora e retorna um valor de seqncia, numrico ou de data e hora. Matemtica - Efetua um clculo com base em valores inseridos como parmetros para a funo e retorna um valor numrico. Metadados - Retorna informaes sobre o banco de dados e os objetos do banco de dados. Segurana - Retorna informaes sobre usurios e cargos. Seqncia de caracteres Efetua uma operao sobre um valor inserido de seqncia (char ou varchar) e retorna um valor de seqncia de caracteres ou numrico. Sistema - Efetua operaes e retorna informaes sobre valores, objetos e configuraes no SQL Server. Estatstica do sistema Retorna informaes estatsticas sobre o sistema. Texto e imagem Efetua uma operao sobre um valor inserido de texto ou imagem ou sobre uma coluna, e retorna informaes sobre o valor.

Fun Funes do sistema Exemplo:


USE northwind SELECT DB_NAME() AS 'database' GO

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do sistema Tipos de funes:


Podem ser usadas como referncias de tabela em uma instruo Transact-SQL Exemplo:
SELECT * FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles') GO
Est Est fun funo funcionar funcionar sempre?

Fun Funes do sistema


Funo de converso de data:
SELECT 'ANSI:', CONVERT (varchar(30), GETDATE(), 102) AS Style UNION SELECT 'Japanese:', CONVERT(varchar(30), GETDATE(), 111) UNION SELECT 'European:', CONVERT(varchar(30), GETDATE(), 113) Repare que a instru instruo SELECT GO retorna dados que concatenados
UNION agrupa conjunto de dados

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do sistema Resultado:


Style ANSI: 1998.11.20 Japanese: 11/20/98 European: 20 Nov 1998 16:44:12:857

Fun Funes do sistema Exemplo do uso da funo DATEFORMAT:


SET DATEFORMAT dmy GO DECLARE @vdate datetime SET @vdate = '11/29/98' SELECT @vdate GO DATEFORMAT define o formato de
data padro atual Repare que a data impressa (dmy ) (dmy) de forma diferente do padro ANSI

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do sistema Exemplo de funo que interage com dados do SGDB:
USE library SELECT user_name(), app_name() GO

Fun Funes do sistema Exemplo de funo que obtm dados sobre o BD:
USE library SELECT COLUMNPROPERTY(OBJECT_ID('member'), 'firstname', 'AllowsNull') GO

SQL Avan Avanado

SQL Avan Avanado

Operadores
Operadores so smbolos que efetuam clculos matemticos, concatenaes de seqncias de caracteres e comparaes entre colunas, constantes e variveis. possvel combinar e utilizar os operadores em condies de pesquisa. A ordem em que os operadores sero processados baseia-se em uma precedncia predefinida. Quatro tipos de operadores: aritmticos, de comparao, de concatenao de seqncias de caracteres e lgicos

Operadores
Aritmticos:
Aditivos: + e Multiplicativos: *, / e %

Comparao:
Retornam verdadeiro ou falso =, <, >, <=, >= e <>

Concatenao:
Somente com dados String: +

Lgicos
Utilizados para conectar o resultado de mais de uma expresso OR, AND e NOT Usados na clusula WHERE

SQL Avan Avanado

SQL Avan Avanado

Operadores Precedncia:
Agrupamento primrio: ( ) Aritmtico Multiplicativo: *, / e % Aritmtico Aditivo: e + Concatenao de seqncias de caracteres: + Lgico NOT: NOT Lgico AND: AND Lgico OR: OR

Expresses Combinao de campos e variveis com operadores e funes para retornar um resultado Tipo de retorno depende dos elementos da expresso

SQL Avan Avanado

SQL Avan Avanado

Expresses
Exemplo:
USE northwind SELECT OrderID, ProductID ,(UnitPrice * Quantity) as ExtendedAmount FROM [Order Details] WHERE (UnitPrice * Quantity) > 10000 GO

Elementos de Controle de Fluxo elementos de linguagem que controlam o fluxo da lgica em uma instruo a funo CASE que permite usar uma lgica condicional em um nico registro de cada vez, em uma instruo SELECT ou UPDATE

SQL Avan Avanado

SQL Avan Avanado

Elementos de Controle de Fluxo


Exemplo nvel de instruo:
USE northwind IF EXISTS (SELECT * FROM orders WHERE customerid = 'frank') PRINT '*** Cliente no pode ser excludo ***' ELSE BEGIN DELETE customers WHERE customerid = 'frank' PRINT '*** Cliente foi excludo ***' END GO

Elementos de Controle de Fluxo


Exemplo nvel de registro: DECLARE @n tinyint SET @n = 5 IF (@n BETWEEN 4 and 6) BEGIN WHILE (@n > 0) BEGIN SELECT @n AS 'Nmero', CASE WHEN (@n % 2) = 1 THEN 'MPAR' ELSE 'PAR' END AS 'Tipo SET @n = @n - 1 END END ELSE PRINT 'SEM ANLISE' GO

SQL Avan Avanado

SQL Avan Avanado

Views Definio:
So tabelas que representam uma viso de um conjunto de dados de uma ou mais tabelas. No armazenam nenhum dado, apenas fornecem a visualizao para estes de forma diferente. VIEW == SELECT

Views
Exemplos:
Um subconjunto de registros ou colunas de uma tabela base: subconjunto das pessoas de uma tabela de pessoas com idade > 30 anos. Uma unio, interseco ou associao de duas ou mais tabelas base: Pessoas com idade > 30 e que so do sexo masculino Um resumo estatstico de uma tabela base: tabela que mostra os pedidos com uma coluna totalizando o valor dos seus itens. Um subconjunto de outra view ou alguma combinao de views e tabelas base.

SQL Avan Avanado

SQL Avan Avanado

Views Vantagens:
Visualizao focalizada Tirar a complexidade da visualizao dos dados, como por exemplo, unies de tabelas restries sobre os conjuntos Organizao de dados para exportao Permisso de acesso com restries Desempenho, pois o resultado fica armezanado

Views
Sintaxe:
CREATE VIEW propr.nome_da_view [(coluna [,n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]] AS instruo_select [WITH CHECK OPTION]

SQL Avan Avanado

SQL Avan Avanado

Views View no Transact:


USE Northwind GO CREATE VIEW dbo.EmployeeView AS SELECT LastName, Firstname FROM Employees GO SELECT * from EmployeeView GO

Views Padronizao:
Segue a mesma verificao dos identificadores Nomes devem ser nicos fortemente recomendado fazer distino entre padro de nomes de tabelas e de views:
Tabela: Pessoas View: View_Pessoas_Masculino

SQL Avan Avanado

SQL Avan Avanado

Views S podem criar views usurios com permisso de administradores do BD


Definir usurio dba com proprietrio de todas as tabelas

Views
Restries:
A instruo CREATE VIEW no pode incluir as clusulas COMPUTE ou COMPUTE BY. A instruo CREATE VIEW no pode incluir a palavrachave INTO. A instruo CREATE VIEW s poder incluir a clusula ORDER BY se a palavra-chave TOP for usada. As views no podem fazer referncia a tabelas temporrias. As views no podem fazer referncia a mais de 1.024 colunas. A instruo CREATE VIEW no pode ser combinada com outras instrues Transact-SQL em um nico lote.

Qualquer usurio com permisses mnimas no sistema, por padro, consegue visualizar os dados de uma view.

SQL Avan Avanado

SQL Avan Avanado

Views
Exemplo 2:
USE Northwind GO CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) AS SELECT OD.OrderID, SUM(CONVERT (money,(OD.UnitPrice*Quantity*(1Discount)/100))*100) FROM [Order Details] OD GROUP BY OD.OrderID GO SELECT * FROM OrderSubtotalsView GO

Views
Views para fornecer um modo conveniente de examinar informaes de duas ou mais tabelas associadas em um local central: Neste exemplo, ShipStatusView associa as tabelas Customers (Clientes) e Orders (Pedidos).
USE Northwind GO CREATE VIEW dbo.ShipStatusView AS SELECT OrderID, ShippedDate, ContactName FROM Customers c INNER JOIN Orders o ON c.CustomerID = O.CustomerID WHERE RequiredDate < ShippedDate SELECT * FROM ShipStatusView OrderID ShippedDate ContactName GO

SQL Avan Avanado

SQL Avan Avanado

Views Encriptao:
Usar a opo WITH ENCRYPTION na criao da view Criptografa as entradas da tabela syscomments, critografando a definio da view Para descriptografar somente removendo e criando novamente a view.
Pode ser interessante guardar uma cpia do script de criao da view em algum lugar (arquivo) seguro

Views Exerccio:
Criar a view: pgina ?? Sem a opo de encriptao Ver os dados da tabela syscomments Apagar a view e criar de novo com a opo de encriptao Ver novamente os dados da tabela syscomments

SQL Avan Avanado

SQL Avan Avanado

Views Exerccio:
Crie a tabela Pessoas no transact-SQL, com os campos nome, idade e sexo Insira cinco registros nesta tabela; sendo 3 homens e duas mulheres. Trs destas pessoas tem idade maior que 30. Crie uma view para representar as mulheres com idade maior que trinta. Altere os dados e apenas faa mais um comando de seleo simples na view.

Views Alterando de definio da view Exemplo:


USE Northwind GO ALTER VIEW dbo.EmployeeView AS SELECT LastName, FirstName, Extension FROM Employees

SQL Avan Avanado

SQL Avan Avanado

Views Ateno:
Se voc definir uma view com uma instruo SELECT * e, depois, alterar a estrutura das tabelas subjacentes adicionando colunas, as novas colunas no aparecero na view. Quando todas as colunas so selecionadas em uma instruo CREATE VIEW, a lista de colunas interpretada apenas quando voc cria a view pela primeira vez. Para ver as novas colunas na view, voc deve alter-la.

Views Apagando uma view


DROP VIEW <nome da view> Apague a view definida no exerccio anterior

10

SQL Avan Avanado

SQL Avan Avanado

Views Atualizao dos dados atravs das views possvel considerando as seguintes restries:
Que seja proveniente de uma nica tabela e que contenha todos os seu campos no nulos No possua funes de agregao Podero ocasionar erros se afetarem colunas s quais a view no faz referncia.

Views Otimizao de desempenho


Armazenamento de dados de consultas completas
Joins com views mais rpido do que com vrias tabelas

Evitar aninhamento de views.


Podem esconder problemas com resultados Exemplo das pginas 49-50

SQL Avan Avanado

SQL Avan Avanado

Views
Prticas recomendadas:
Nomes consistentes e com um padro que os distinguem das tabelas; facilitando a identificao das views Dbo como proprietrio: facilita utilizao, j que, por ser o usurio default, no necessrio colocar o nome do usurio proprietrio da view no momento de us-la. Verifique dependncias dos objetos antes de exclu-los
sp_denpends

Procedimentos Armazenados Stored procedures


Coleo nomeada de instrues TransactSQL que armazenada no servidor. Suporte a recursos de programao So funes ou procedimentos, logo encapsulam execuo repetida de cdigo (mesmo cdigo executado em lugares diversos)

Se for necessrio esconder a definio de uma view, no apague esta definio da tabela syscomments; use a opo WITH ENCRYPTION nos comandos CREATE VIEW ou ALTER VIEW. Cuidado views aninhadas, tenha certeza de sua real necessidade; elas podem esconder problemas com resultados.

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados
Tipos
Armazenados no BD do sistema.
Fornecem informaes das tabelas do sistema Por padro, precedidos por sp_ So funes do sistema Usados por qualquer BD

Procedimentos Armazenados Caractersticas


Instrues para executar operaes sobre o BD Permite passagem de parmetros Retorno de status da execuo Parmetros de sada

Procedimentos de armazenamento local


Uso restrito

Procedimentos temporrios locais (#) ou globais (##)


Locais ao usurio ou globais para todas as sesses

Procedimentos externos (construdos como DLL).


Armazenados fora do BD Prefixo xp_

11

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Processamento


Criao Primeira consulta, coloca o plano de consulta respectivo no cache. Cache alocado conforme necessidade Cache de procedimentos

Procedimentos Armazenados Processo de criao:


Codificao Verificao sinttica.
Em caso erro no ser criado nada.

Armazenamento da tabela de sistema sysobjects e texto na syscomments Armazenamento feito dentro da BD atual

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados
Comando de criao: CREATE PROCEDURE
Cria o procedimento e armazena na BD A criao pode referenciar tabelas, view, variveis, ... O que criado dentro do procedimento no tem vida externa ao mesmo Primeiro testar o cdigo e depois realizar o armazenamento do mesmo Uma instruo CREATE PROCEDURE no pode combinada com outras instrues SQL em um nico lote (assim como a VIEW). Deve ter permisses para CREATE PROCEDURE. Tamanho mximo de um procedimento de 128Mb.

Procedimentos Armazenados Sintaxe CREATE PROCEDURE


CREATE PROC nome [;nmero] [{@parmetro tipo_dado} [VARYING][=padrao][OUTPUT]][,...n] [{RECOMPILE|ENCRYPTION|ambos}] [FOR REPLICATION] AS Instruo_sql[...n]

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Exemplo 1:


USE Northwind GO CREATE PROC dbo.OverdueOrders AS SELECT * FROM dbo.Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS NULL GO

Procedimentos Armazenados
Diretrizes para criao:
Recomendo que o usurio dbo possua todos os objetos do BD
Sempre especifique o dbo como proprietrio dos procedimentos, tabelas, views e etc. que voc criar

Considere as permisses necessrias em todos os objetos em que a procedure precisa referenciar.


O ideal se logar no gerenciador do banco como administrador, na hora de criar ou alterar objetos do sistema.

Idealmente, uma procedure realiza uma ao Evitar uso de objetos temporrios, por questes de desempenho. Prefira sp_executesql do que EXECUTE

12

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Executando um procedimento:


EXEC {[@status retorno=] {nome_procedimento[;nmero]|@var_no me_procedimento} } [[@parmetro={valor|@varivel[OUTPUT] |[DEFAULT]][,...n] [WITH RECOMPILE]

Procedimentos Armazenados Executando um procedimento:


EXEC OverdueOrders

Possvel combinar EXEC dentro de um INSERT


Inserir dados com o retorno da execuo de uma procedure Exemplo da pgina 69.

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Alterao


Altera cdigo de uma procedure existente Sintaxe parecida com a CREATE Ver pgina 70. ALTER PROC vai alterar o contedo da PROC dentro da tabela syscomments Exemplo da pgina 71

Procedimentos Armazenados Remoo de procedures


Interessante executar comando sp_depends antes de excluir um registro, para verificar as dependncias. Sintaxe:
DROP PROCEDURE {nome_proc}

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Usando parmetros de entrada


Permitem passagem de valores externos para o procedimento. Generaliza o procedimento. Comando: CREATE PROC @param tipo Considere:
Melhor verificar o que est se recebendo, por exemplo, evitar processar um procedimento com parmetro nulo. Com valor padro, execuo possibilita que no se passe nenhum valor para um determinado parmetro

Procedimentos Armazenados Consideraes sobre o exemplo:


Ordem da declarao difere da ordem de passagem dos parmetros Parmetros @Region e @Fax no so especificados, porqu? No segundo exemplo, pgina 77, os parmetros de passagem no indicam qual parmetro eles esto se referenciando, porque eles so passados na ordem de declarao.

Exemplo da pgina 76.

13

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Parmetros de retorno


Servem para retornar dados processados na procedure para quem a chamou. Sintaxe:
CREATE PROC xyz @x1 int OUTPUT EXEC xyz @idade OUTPUT

Procedimentos Armazenados Exerccios:


crie um procedimento que retorne o maior entre dois nmeros outro para o menor outro para retornar a mdia. Teste os procedimentos criados... Calcular fatorial de um nmero.

Exemplo da pgina 78.

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Tratamento de erros:


Tratamento de mensagens para informar sucesso ou falha de um procedimento. Mensagens tanto para programador, quando para usurio. Retorno satisfatrio / esclarecedor para quem invocou a funo, de tal forma que este possa tratar um erro. Boa prtica: verificar situaes de erro (RN) antes de executar uma rotina.

Procedimentos Armazenados Tratamento de erros:


Instruo RETURN:
Retorna para mtodo anterior Retorna um valor ou no Tambm usada para retornar o status de execuo: normalmente 0 para xito e valores negativos para erros.
Valores de -1 a -14 esto em uso no SQL Server Valores de -15 a -99 esto reservados

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados
Tratamento de erros:
USE Northwind GO CREATE PROCEDURE dbo.GetOrders @CustomerID nchar (10) AS SELECT OrderID, CustomerID, EmployeeID FROM [Order Qry] WHERE CustomerID = @CustomerID RETURN (@@ROWCOUNT) GO

Procedimentos Armazenados Funo sp_addmessage


Insere uma mensagem na tabela de mensagens do BD (sysmessages) Possibilitando assim, que o usurio que executou a procedure, identifique o cdigo do erro que retornou de uma falha de execuo da procedure

14

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados Funo @@error


Retorna o nmero do erro que ocorreu na ltima execuo Caso no tenha ocorrido erro, retorna zero Faa o exemplo das pgina 85-87. Crie uma mensagem personalizada para cada caso de erro, adicione na tabela de mensagens do sistema e mostre o erro gerado, se for o caso, no lote que executou a procedure.

Procedimentos Armazenados Funo RAISERROR


Gera um erro. Utilizada quando da verificao da possibilidade de um erro, lgico, de negcio ou de sistema. Pode ser utilizado para evitar o erro do SGBD e tratar o erro personalizado Exemplo das pginas 89-90

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados
Exerccio
Fazer pesquisa fontica em uma tabela do BD. Algoritmo Soundex como procedure. Este algoritimo foi criado pelo governo Americano para recuperar nomes para a administrao da Seguridade Social nos arquivos Nacionais. O algoritimo simples e esta explicado a seguir.
Uma chave de busca foneticamente igual algum dado da tabela, se o cdigo SOUNDEX dela for igual ao cdigo SOUNDEX de um registro do dado da tabela. O cdigo soundex obtido conforme as seguintes regras: Se o cdigo for maior que quatro caracteres os demais no sero considerados. Se for menor sero acrescidos Zeros. Voc preserva o primeiro caractere da String e atribui valores conforme a tabela abaixo at 3 caracteres. As vogais A,E,I,O,U os caracteres Y,W e H e os demais caracteres no so considerados. Os caracteres numricos so considerados apenas para a primeira casa , os demais no considerados Havendo caracteres repetidos somente o primeiro ser considerado

Procedimentos Armazenados
Exerccio
Cdigo do caractere 0 1 2 3 4 5 6 Caractere Para palavras curtas B, P, F, V C,S,G,J.K,Q,X,Z D, T L M, N R Soundex da palavra BROWN B=B R=6 O=W=0 N=5 B650

SQL Avan Avanado

SQL Avan Avanado

Procedimentos Armazenados

Fun Funes do usu usurio Recurso que permite a customizao de funes para o usurio. Restries
Devem retornar algum valor (escalar ou tabela) Aceitam nenhum ou vrios parmetros de entrada No aceitam parmetros de sada

15

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do usu usurio Tipos:


Escalares
Funes simples, que processam alguma tarefa e retornam um escalar.

Fun Funes do usu usurio Criao (CREATE FUNCTION):


Veja sintaxe na pgina 94 do manual.
GO CREATE FUNCTION fn_NewRegion ( (@param1 NVARCHAR(30)) RETURNS NVARCHAR(30) BEGIN IF @param1 IS NULL SET @param1 = No Aplicvel RETURN @param1 END

Com valor de tabela e instrues


Semelhantes a procedimentos Permitem o uso numa instruo FROM e SELECT

Com valor de tabela in-line


Assemelha-se ao uso de views, porm com suporte parmetros

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do usu usurio Uso da funo em SELECT:


SELECT LastName, City, dbo.fn_NewRegion(Region) AS Region, Country FROM dbo.Employees

Fun Funes do usu usurio Alterao:


A alterao da funo segue a mesma sintaxe de estrutura da criao, com exceo da palavra-chave do comando:
ALTER FUNCTION dbo.fn_NewRegion ...

Excluso de funes:
Semelhante aos demais objetos:
DROP FUNCTION dbo.fn_NewRegion

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do usu usurio Fazer exemplos das pginas:


98 funes escalares 99100 com valor de tabela 101102 tabela in-line. Discusso sobre os exemplos:
Quais so as caractersticas de cada tipo? Em qual situao devemos usar qual tipo de funo?

Fun Funes do usu usurio Boas prticas:


Funes complexas em dados pequenos Cuidado com o encapsulamento
As funes escondem a complexidade de uma consulta simples

Prefira funes procedimentos Funes in-line so parecidas com view, mas com uma vantagem: permitem parmetros

16

SQL Avan Avanado

SQL Avan Avanado

Fun Funes do usu usurio


Exerccio:
Converter o procedimento SoundexFunc para uma funo Criar tabela de Pessoa com os atributos nome e sobrenome Escrever testes usando a SoundexFunc para validar o uso da funo Pergunta:
A comparao usando SoundexFunc mais lenta que a comparao direta de nomes, porque precisa converter o nome para um cdigo antes de pesquisar; mata o ndice!! Ento qual seria a soluo para utilizar o recurso do soundex sem perda de ndices?

Disparadores (TRIGGERS)
So um tipo especial de procedimento que executados sempre que ocorre algum evento. Por exemplo, pode-se criar uma trigger (ou disparador) para que, toda vez que seja inserido um registro em uma determinada tabela, seja criado algum outro registro de relacionamento. A execuo ocorre automaticamente, quando ocorre o evento ao qual a trigger est associada. Inclusive no invocados manualmente

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Uso:


Mais usado para manter integridade Automatizao de operaes complexas em cascata Customizar verificaes e mensagens Permite trabalhar com estado atual e anterior de um dado

Disparadores (TRIGGERS) Uso:


Operaes em cascata
Alterao e excluso em cascata

Automatizao de operaes complexas de integridade


Por exemplo, verificar o estado de um atributo comparando com outras tabelas; caso ele esteja dentro de uma faixa de valores realiza alguma operao sobre os dados, caso contrrio realiza outra. Digamos que pedido no pode pedir mais do que X unidades de um produto que est num limite mnimo em estoque.

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Uso:


Customizar verificaes e mensagens
Verifica alguma condio especial do sistema e lana um erro de lgica de negcios apropriado.

Disparadores (TRIGGERS)
Consideraes:
Podem conter ROLLBACK
Entretanto, se necessrio sair do script da trigger quando feito um ROLLBACK, melhor usar comando RETURN para sair da execuo

Desnormalizao
Juno de vrias tabelas para consolidao de dados Modelo continua ntegro, mas a visualizao pode ser feita conjunta

Em geral, os disparadores so reativos:


Dado um evento um disparador executado Restries e INSTEAD OF so executados antes do evento

Disparadores podem afetar vrias linhas de dados


@@ROWCOUNT

Permite trabalhar com estado atual e anterior de um dado

17

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Criao (CREATE TRIGGER)


CREATE TRIGGER nome ON tabela {FOR | AFTER | INSTEAD OF | } {INSERT | UPDATE | DELETE} AS IF UPDATE(coluna) ... Instrues

Disparadores (TRIGGERS) Criao (CREATE TRIGGER):


FOR e AFTER so executados aps as aes INSERT, UPDATE ou DELETE INSTEAD OF, pelo contrrio, cancela a operao e desvia para execuo do cdigo do disparador

Conferir em casa as instrues que no podem estar presentes nas triggers (pgina 114) Fazer exemplo das pginas 115116.

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Alterando uma trigger:


Usar o comando ALTER TRIGGER, cuja sintaxe igual a do comando CREATE TRIGGER

Disparadores (TRIGGERS)
Funcionamento de trigger
Acesso aos dados temporrios e log para tomada de decises Insert: tabela inserted Delete: tabela deleted
Dados removidos das tabelas do BD

Descartando ou removendo uma trigger:


DROP TRIGGER

Desativando / Ativando triggers


ALTER TABLE tabela {ENABLE | DISABLE} TRIGGER {ALL | nome da trigger [,...]}

Update: registra em ambas as tabelas temporrias: deleted (os dados anteriores) e inserted (dados novos)
IF UPDATE(coluna) determina se um registro foi alterado ou no e executar instrues conforme o caso Exemplo da pgina 122.

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Funcionamento INSTEAD OF


Pode ser associado a tabelas e views No pode ser associado a views com WITH CHECK OPTION Executa operaes antes da instruo de atualizao Exemplo das pginas 123124

Disparadores (TRIGGERS) Disparadores aninhados:


Quando um disparador executado, o resultado da sua execuo inicia um novo disparador, que pode iniciar outro e ... Limite de 32 disparadores aninhados sp_configure habilita / desabilita aninhamento de triggers
sp_configure (nested triggers, 0)

Aninhamento cclio no permitido / executado Ateno para aninhamento com dados complexos

18

SQL Avan Avanado

SQL Avan Avanado

Disparadores (TRIGGERS) Ativando recursividade


Recursividade capacidade de um mtodo em chamar ele mesmo para executar novamente, sob novas condies, at um ponto de parada. Ativao:
ALTER DATABASE ClassNorthwind SET RECURSIVE_TRIGGERS ON

Disparadores (TRIGGERS)
Exerccios:
Pginas 131132 Criar uma tabela pessoa com os campos: cdigo, nome e sobrenome. Criar uma trigger que, quando um registro inserido na tabela pessoa, ela, automaticamente, insere um registro equivalente na tabela PessoaSoundex com os dados de pessoa, passando pela funo soundexTest. A tabela PessoaSoundex contm os seguintes campos: codigo, nomex, sobrenomex. Faa um procedimento que receba como parmetro o nome de uma pessoa, e faa a pesquisa pelo nome soundex de uma pessoa, fazendo uso das tabelas acima. Lgica:
Converter o parmetro para um cdigo soundex Procurar na tabela PessoaSoundex os registro com cdigos equivalentes, mas retornar os dados equivalentes na tabela Pessoa

Recursividade pode ser direta ou indireta (cclica)

SQL Avan Avanado

SQL Avan Avanado

ndices Uso
Melhorar o desempenho de consultas, agilizando (indexando) o acesso a dados

ndices
ndices automticos:
PRIMARY KEY e UNIQUE

Criao de ndices
CREATE INDEX

Armazenados na tabela sysindexes Um ndice funciona atribuindo uma chave de busca a um dado
O situao : apenas um valor de chave para um dado (1 : 1) Pode acontecer de uma chave retornar mais de um dado.

Remoo de ndices
DROP INDEX

Quando um ndice de agrupamento criado, todos os ndices sem agrupamento so recriados Sintaxe e exemplo na pgina 135

SQL Avan Avanado

SQL Avan Avanado

ndices ndices agrupamento:


CLUSTERED Exemplo da pgina 139, mostra ndices duplicados

ndices
ndices compostos:
Unio mais de um campo Por exemplo, no permitir duplicidade de registros com valores de outras tabelas associadas Digamos uma tabela de relacionamento entre Pessoa e uma tabela de endereo. possvel colocar uma restrio com ndice para que uma pessoa no dois vnculos para um mesmo endereo. Exemplo da pgina 141. Exerccio: criar a situao exposta acima (pessoa x endereo)

Sem agrupamento:
NONCLUSTERED

19

Potrebbero piacerti anche