Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Apresenta Apresentao
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
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
Diretivas de lotes Comentrios Identificadores Tipos de dados Variveis Funes do sistema Operadores Expresses Controle de fluxo Palavras reservadas
Transaction-SQL
Programao de funes auxiliares
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
Comandos so passados por parmetro e o mtodo retorna o status da execuo: sucesso ou erro.
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
Suprimindo um linha
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.
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
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
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.
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.
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.
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.
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.
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
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
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
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
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
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
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
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.
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]
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
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.
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
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
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 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.
10
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
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
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.
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
11
Armazenamento da tabela de sistema sysobjects e texto na syscomments Armazenamento feito dentro da BD atual
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
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
Idealmente, uma procedure realiza uma ao Evitar uso de objetos temporrios, por questes de desempenho. Prefira sp_executesql do que EXECUTE
12
13
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
14
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
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
Excluso de funes:
Semelhante aos demais objetos:
DROP FUNCTION dbo.fn_NewRegion
Prefira funes procedimentos Funes in-line so parecidas com view, mas com uma vantagem: permitem parmetros
16
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
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
17
Conferir em casa as instrues que no podem estar presentes nas triggers (pgina 114) Fazer exemplo das pginas 115116.
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
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.
Aninhamento cclio no permitido / executado Ateno para aninhamento com dados complexos
18
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
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
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