BDII

119
1 BANCO DE DADOS II

description

artigo

Transcript of BDII

  • 1

    BANCO DE DADOS II

  • 2

    UNIDADE 1 - SQL .................................................................................................................................................................. 3

    1.1 LINGUAGEM DE PROGRAMAO TRANSACT-SQL ................................................................................................................ 31.2 ELEMENTOS DE SINTAXE DO TRANSACT-SQL ...................................................................................................................... 31.3 DIRETIVAS EM LOTES ..................................................................................................................................................... 31.4 COMENTRIOS ............................................................................................................................................................. 41.5 IDENTIFICADORES .......................................................................................................................................................... 61.6 TIPOS DE DADOS ........................................................................................................................................................... 81.7 VARIVEIS ................................................................................................................................................................. 101.8 FUNES DO SISTEMA ................................................................................................................................................. 101.9 OPERADORES ............................................................................................................................................................. 131.10 EXPRESSES .............................................................................................................................................................. 151.11 ELEMENTOS DE LINGUAGEM DE CONTROLE DE FLUXO ......................................................................................................... 16

    UNIDADE 2 - IMPLEMENTANDO VIEWS ............................................................................................................................ 20

    2.1 O QUE SO VIEWS ...................................................................................................................................................... 202.2 VANTAGENS DAS VIEWS ............................................................................................................................................... 212.3 CRIANDO VIEWS ......................................................................................................................................................... 222.4 RESTRIES S DEFINIES DE VIEWS ............................................................................................................................. 232.5 ALTERANDO E DESCARTANDO VIEWS ............................................................................................................................... 242.6 OCULTANDO DEFINIES DE VIEWS ................................................................................................................................ 262.7 MODIFICANDO DADOS ATRAVS DE VIEWS ....................................................................................................................... 272.8 OTIMIZANDO O DESEMPENHO COM O USO DE VIEWS ......................................................................................................... 272.9 USANDO VIEWS INDEXADAS .......................................................................................................................................... 292.10 PRTICAS RECOMENDADAS ........................................................................................................................................... 30

    UNIDADE 3 - IMPLEMENTANDO PROCEDIMENTOS ARMAZENADOS .............................................................................. 32

    3.1 DEFININDO PROCEDIMENTOS ARMAZENADOS ................................................................................................................... 323.2 PROCESSAMENTO INICIAL DE PROCEDIMENTOS ARMAZENADOS ............................................................................................ 333.3 PROCESSAMENTO SUBSEQENTE DE PROCEDIMENTOS ARMAZENADOS .................................................................................. 353.4 VANTAGENS DOS PROCEDIMENTOS ARMAZENADOS ........................................................................................................... 363.5 CRIANDO PROCEDIMENTOS ARMAZENADOS ...................................................................................................................... 363.6 ANINHANDO PROCEDIMENTOS ARMAZENADOS ................................................................................................................. 383.7 DIRETRIZES PARA A CRIAO DE PROCEDIMENTOS ARMAZENADOS ........................................................................................ 383.8 EXECUTANDO PROCEDIMENTOS ARMAZENADOS ................................................................................................................ 393.9 ALTERANDO PROCEDIMENTOS ARMAZENADOS .................................................................................................................. 413.10 DESCARTANDO PROCEDIMENTOS ARMAZENADOS .............................................................................................................. 433.11 USANDO PARMETROS EM PROCEDIMENTOS ARMAZENADOS .............................................................................................. 433.12 RETORNANDO VALORES COM PARMETROS DE SADA ......................................................................................................... 473.13 RECOMPILANDO EXPLICITAMENTE PROCEDIMENTOS ARMAZENADOS ..................................................................................... 483.14 TRATANDO MENSAGENS DE ERRO ................................................................................................................................... 503.15 DEMONSTRAO: TRATANDO MENSAGENS DE ERRO .......................................................................................................... 553.16 PRTICAS RECOMENDADAS ........................................................................................................................................... 57

    UNIDADE 4 - IMPLEMENTANDO FUNES DEFINIDAS PELO USURIO ........................................................................... 58

    4.1 O QUE UMA FUNO DEFINIDA PELO USURIO? ............................................................................................................. 584.2 CRIANDO UMA FUNO DEFINIDA PELO USURIO .............................................................................................................. 584.3 ALTERANDO E DESCARTANDO FUNES DEFINIDAS PELO USURIO ........................................................................................ 604.4 EXEMPLOS DE FUNES DEFINIDAS PELO USURIO ............................................................................................................. 614.5 PRTICAS RECOMENDADAS ........................................................................................................................................... 65

    UNIDADE 5 - IMPLEMENTANDO DISPARADORES ............................................................................................................. 66

    5.1 O QUE SO DISPARADORES? ......................................................................................................................................... 665.2 USOS DE DISPARADORES .............................................................................................................................................. 675.3 CONSIDERAES SOBRE O USO DE DISPARADORES ............................................................................................................. 69

  • 3

    5.4 CRIANDO DISPARADORES .............................................................................................................................................. 705.5 DESATIVANDO OU ATIVANDO UM DISPARADOR ................................................................................................................. 745.6 COMO FUNCIONAM OS DISPARADORES ........................................................................................................................... 745.7 COMO FUNCIONAM OS DISPARADORES ANINHADOS ........................................................................................................... 805.8 EXEMPLOS DE DISPARADORES ........................................................................................................................................ 835.9 CONSIDERAES SOBRE O DESEMPENHO ......................................................................................................................... 85

    UNIDADE 6 - CRIANDO NDICES ......................................................................................................................................... 87

    6.1 CRIANDO E DESCARTANDO NDICES ................................................................................................................................. 876.2 CRIANDO NDICES EXCLUSIVOS ....................................................................................................................................... 896.3 LOCALIZANDO TODOS OS VALORES DUPLICADOS EM UMA COLUNA ........................................................................................ 906.4 CRIANDO NDICES COMPOSTOS ...................................................................................................................................... 906.5 OBTENDO INFORMAES SOBRE OS NDICES EXISTENTES ..................................................................................................... 92

    UNIDADE 7 - OTIMIZANDO O DESEMPENHO DE CONSULTAS .......................................................................................... 94

    7.1 INTRODUO AO OTIMIZADOR DE CONSULTAS .................................................................................................................. 947.2 COMO O OTIMIZADOR DE CONSULTAS USA A OTIMIZAO BASEADA EM CUSTOS ...................................................................... 957.3 COMO O OTIMIZADOR DE CONSULTAS FUNCIONA .............................................................................................................. 967.4 FASES DE OTIMIZAO DE CONSULTAS ............................................................................................................................. 977.5 ARMAZENANDO EM CACHE O PLANO DE EXECUO ........................................................................................................... 977.6 RECOMPILANDO OS PLANOS DE EXECUO ....................................................................................................................... 987.7 DEFININDO UM LIMITE DE CUSTO ................................................................................................................................... 997.8 OBTENDO INFORMAES SOBRE PLANOS DE EXECUO ...................................................................................................... 997.9 EXIBINDO GRAFICAMENTE O PLANO DE EXECUO ........................................................................................................... 101

    UNIDADE 8 - CRIANDO CURSORES .................................................................................................................................. 103

    8.1 INTRODUO SOBRE CURSORES ................................................................................................................................... 1038.2 DECLARANDO UM CURSOR .......................................................................................................................................... 1038.3 ABRINDO UM CURSOR ............................................................................................................................................... 1048.4 PERCORRENDO UM CURSOR ........................................................................................................................................ 1058.5 EXECUTANDO COMANDOS EM UM CURSOR .................................................................................................................... 1058.6 CONFIRMANDO OU RETORNANDO UM CURSOR ............................................................................................................... 106

    UNIDADE 9 - ESQUEMAS XML ......................................................................................................................................... 110

    9.1 INTRODUO SOBRE XSD ........................................................................................................................................... 1109.2 CRIANDO UM ESQUEMA XSD ...................................................................................................................................... 1109.3 ASSOCIANDO UM ESQUEMA XSD ................................................................................................................................. 1119.4 ALTERANDO UM ESQUEMA XSD .................................................................................................................................. 1129.5 DELETANDO UM ESQUEMA XSD .................................................................................................................................. 112

    UNIDADE 10 - AGENTE DE SERVIOS ............................................................................................................................ 114

    10.1 INTRODUO SOBRE AGENTE DE SERVIOS .................................................................................................................... 11410.2 INICIANDO O AGENTE DE SERVIOS .............................................................................................................................. 11410.3 CRIANDO UM TRABALHO ............................................................................................................................................ 11510.4 PARA CRIAR UMA ETAPA DE TRABALHO TRANSACT-SQL ................................................................................................... 11510.5 PARA CRIAR E ANEXAR UMA AGENDA A UM TRABALHO ..................................................................................................... 116

    UNIDADE 11 - PROJETO FINAL ...................................................................................................................................... 118

    11.1 SITUAO PROBLEMA ................................................................................................................................................ 118

  • 3

    Unidade 1 - SQL

    1.1 Linguagem de programao Transact-SQL

    O American National Standards Institute (ANSI) e a International Standards Organization (ISO) definiram padres para o SQL. Usando o Transact-SQL, o Microsoft SQL Server oferece suporte implementao em nvel de acesso do SQL-92, padro SQL publicado pelo ANSI e pela ISO em 1992. Os elementos de linguagem do Transact-SQL compatveis com ANSI-SQL podem ser executados em qualquer produto compatvel com nvel de acesso ANSI-SQL. O Transact-SQL tambm contm vrias extenses para oferecer maior funcionalidade.

    1.2 Elementos de sintaxe do Transact-SQL

    As instrues de DML so construdas com o uso de vrios elementos de sintaxe do Transact-SQL. Por exemplo: Diretivas em lotes

    Comentrios

    Identificadores Tipos de dados

    Variveis

    Funes do sistema

    Operadores

    Expresses Elementos de linguagem de controle de fluxo

    Palavras-chave reservadas

    1.3 Diretivas em lotes

    O SQL Server processa uma nica ou vrias instrues Transact-SQL em lotes. Uma diretiva em lotes instrui o SQL Server a analisar e executar todas as instrues contidas no lote. Existem dois mtodos bsicos de enviar os lotes para o SQL Server.

  • Banco de Dados II

    4

    GO

    Os utilitrios do SQL Server interpretam GO como um sinal para enviar o lote atual de instrues Transact-SQL para o SQL Server. O comando GO define os lotes de instrues Transact-SQL para ferramentas e utilitrios e finaliza o lote. Esse comando no uma instruo Transact-SQL real. Ao usar o comando GO, considere estes fatos:

    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). Uma instruo Transact-SQL no pode ocupar o mesmo registro que um comando GO, embora o registro possa conter comentrios. 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. O escopo das variveis locais (definidas pelo usurio) limitado a um lote e no possvel fazer referncia a ele depois de um comando GO. GO no uma instruo Transact-SQL real; GO usado para definir os lotes para ferramentas e utilitrios.

    EXEC

    A diretiva EXEC usada para executar uma funo definida pelo usurio, um procedimento do sistema, um procedimento armazenado definido pelo usurio ou um procedimento armazenado estendido; ela tambm pode controlar a execuo de uma seqncia de caracteres em um lote do Transact-SQL. Parmetros podem ser passados como argumentos e um status de retorno pode ser atribudo.

    1.4 Comentrios

    Comentrios so seqncias de texto no executveis inseridas em instrues para descrever a ao ou desativar uma ou mais linhas da instruo. Eles podem ser usados de duas maneiras. Em linha com uma instruo ou como um bloco.

    Comentrios em linha

    possvel criar comentrios em linha usando dois hifens (--) para isol-los da instruo. O Transact-SQL ignora o texto posicionado direita dos caracteres de comentrio. Esses caracteres de comentrio tambm podem ser usados para desativar linhas de uma instruo.

  • Banco de Dados II

    5

    Este exemplo usa um comentrio em linha para explicar um clculo.

    Este exemplo usa um comentrio em linha para impedir a execuo de uma seo de uma instruo. USE northwind SELECT productname , (unitsinstock - unitsonorder) -- Calcula o inventrio -- , supplierid

    FROM products GO

    Comentrios em bloco

    possvel criar blocos de comentrios de vrias linhas, inserindo um caractere de comentrio (/*) no incio do texto do comentrio, digitando o comentrio e concluindo-o com um caractere de encerramento de comentrio (*/). Use esse caractere indicativo para criar uma ou mais linhas de comentrios ou cabealhos de comentrios. Texto descritivo que documenta as instrues subseqentes. Geralmente, os cabealhos incluem o nome do autor, a data de criao e da ltima modificao do script, informaes sobre a verso e uma descrio da ao executada pela instruo.

    Este exemplo apresenta um cabealho de comentrio que ocupa vrias linhas.

    /* Este cdigo recupera todas as linhas da tabela products e exibe o preo unitrio, o preo unitrio aumentado

  • Banco de Dados II

    6

    em 10% e o nome do produto. */ USE northwind SELECT unitprice, (unitprice * 1.1), productname FROM products GO Insira comentrios em um script inteiro para descrever as aes das instrues. Esse recurso importante principalmente se outros usurios precisarem examinar ou implementar o script.

    Esta seo de um script est comentada para impedir a sua execuo. Esse um recurso til ao depurar ou solucionar problemas de arquivo script.

    1.5 Identificadores

    O SQL Server fornece uma srie de regras de nomeao padro para identificadores de objetos e um mtodo de uso de delimitadores para identificadores que no sejam padro. Sempre que possvel, procure atribuir nomes aos objetos empregando os caracteres de identificadores padro.

    Identificadores padro

    Os identificadores padro podem conter de 1 a 128 caracteres, inclusive letras, smbolos (_, @ ou #) e nmeros. No so permitidos espaos incorporados.

    Examine a seguir as regras para usar identificadores:

    O primeiro caractere deve ser um caractere alfabtico, de a-z ou A-Z.

  • Banco de Dados II

    7

    Aps o primeiro caractere, 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.

    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 delimitados

    Se um identificador atender a todas as regras de formato de identificadores, poder ser utilizado com ou sem delimitadores. Se um identificador no atender a uma ou mais regras de formato de identificadores, dever ser sempre delimitado. 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 quando includos em instrues Transact-SQL.

    Os identificadores agrupados so delimitados por colchetes ([ ]): SELECT * FROM [Espaos no nome da tabela] possvel utilizar sempre os delimitadores agrupados, independentemente do status da opo SET QUOTED_IDENTIFIER. Os identificadores entre aspas so delimitados por aspas duplas (""): SELECT * FROM "Espaos no nome da tabela" S possvel usar identificadores entre aspas com a opo SET QUOTED_IDENTIFIER ativada.

    Diretrizes de nomeao de identificadores

    Ao nomear objetos do banco de dados: Mantenha os nomes curtos.

  • Banco de Dados II

    8

    Quando possvel, empregue nomes significativos.

    Use convenes de nomeao simples e fceis. Descubra o que funcionar melhor na sua situao e seja coerente. Evite criar convenes de nomeao muito complexas, porque podem se tornar difceis de controlar ou entender. Por exemplo, retire as vogais se o nome deum objeto precisar ficar parecido com uma palavra-chave (como um procedimento armazenado de backup chamado bckup). Use um identificador que diferencie tipos de objeto, principalmente para views e procedimentos armazenados. Os administradores de sistemas costumam confundir views com tabelas, um descuido que pode gerar problemas imprevisveis. 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.

    1.6 Tipos de dados

    Os tipos de dados restringem os tipos de valores que podem ser armazenados em um banco de dados. Os tipos de dados so atributos que especificam o tipo de informao que pode ser armazenado em uma coluna, parmetro ou varivel. A maioria das instrues Transact-SQL no faz referncia explcita a tipos de dados, mas os resultados da maioria das instrues so influenciados pelas interaes entre os tipos de dados dos objetos aos quais a instruo faz referncia. O SQL Server inclui tipos de dados fornecidos pelo sistema (base), mas voc tambm pode criar tipos de dados. Alguns exemplos de tipos de dados base so:

    Numbers

    Este tipo de dados representa valores numricos e inclui inteiros, como int, tinyint, smallint e bigint. Ele tambm inclui valores decimais precisos, como numeric, decimal, money e smallmoney, e valores de ponto flutuante, como float e real.

    Dates

    Este tipo de dados 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.

    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.

  • Banco de Dados II

    9

    Binary

    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 binary incluem binary e varbinary. O tipo de dados bit indica um valor de bit nico igual a zero ou um. O tipo de dados rowversion indica um valor binrio especial de 8 bytes que exclusivo em um banco de dados.

    Unique Identifiers

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

    SQL Variants

    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.

    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 no-Unicode 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.

    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.

  • Banco de Dados II

    10

    1.7 Variveis

    Variveis so elementos da linguagem com valores atribudos. Voc pode usar variveis locais no Transact-SQL. Uma varivel local definida pelo usurio na instruo DECLARE, recebe um valor inicial atravs da instruo SET ou SELECT e usada na instruo, lote ou procedimento em que foi declarada. O escopo da varivel local tem durao do lote em que definido. A varivel local precedida de um smbolo @. Os nomes de variveis precedidos de dois smbolos @ representam um tipo de funo.

    Consulte Transact SQL Reference, Functions na guia Contents (Contedo) do Books Online (Livros on-line) do SQL Server para obter mais informaes. DECLARE {@varivel_local tipo_de_dados} [,...n] SET @nome_da_varivel_local = expresso

    Este exemplo cria as variveis locais @EmpID e @vlname, atribui um valor a @vlname e atribui um valor a @EmpID consultando o banco de dados Northwind para selecionar o registro que contm o valor da varivel @vlname. 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

    1.8 Funes do sistema

    Voc pode usar funes, inclusive Funes do sistema, em qualquer local onde uma expresso seja permitida em uma instruo de consulta do Transact-SQL.

  • Banco de Dados II

    11

    O Transact-SQL dispe de vrias funes que retornam informaes. Algumas funes recebem os parmetros de entrada e retornam valores que podem ser utilizados em expresses. Outras apenas retornam valores sem exigir entrada. A linguagem de programao Transact-SQL fornece muitos tipos de funes. Estes so os trs tipos de funes com os quais voc deve estar familiarizado: Agem sobre o conjunto de valores de uma coluna selecionada em um conjunto de resultados, mas retornam um valor individual e de resumo. O exemplo a seguir calcula a mdia da coluna unitprice (preos unitrios) para todos os produtos da tabela products. USE northwind SELECT AVG(unitprice) AS AvgPrice FROM products GO

    Retornam um valor individual que opera a partir de nenhum ou de diversos valores escalares individuais. possvel utilizar essas funes sempre que houver uma expresso. 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 retornam 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.

  • Banco de Dados II

    12

    Este exemplo de funo de metadados retorna o nome do banco de dados em uso no momento.

    USE northwind SELECT DB_NAME() AS 'database' GO

    Podem ser usadas como referncias de tabela em uma instruo Transact-SQL.

    O exemplo a seguir executa uma consulta distribuda para recuperar informaes da tabela titles (ttulos). Observe que esse exemplo no ser executado corretamente sem o acesso a um banco de dados Oracle. O SQL Server ir gerar uma mensagem para esse efeito. SELECT * FROM OPENQUERY(OracleSvr, 'SELECT name, id FROM owner.titles') GO

    Exemplos de funes do sistema

    As funes do sistema so normalmente usadas para converter dados de datas do formato de um pas no de outro.

    Para alterar os formatos de data, use a funo CONVERT com a opo de estilo para determinar o formato da data que ser retornado.

    Este exemplo demonstra como converter datas em diversos estilos. 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) GO Style ANSI: 1998.11.20 Japanese: 11/20/98 European: 20 Nov 1998 16:44:12:857

  • Banco de Dados II

    13

    Este exemplo utiliza a opo DATEFORMAT da instruo SET para formatar datas para a durao de uma conexo. Essa configurao usada somente na interpretao de seqncias de caracteres medida que elas so convertidas em valores de data. Ela no afeta a exibio dos valores de data. SET DATEFORMAT dmy GO DECLARE @vdate datetime SET @vdate = '11/29/98' SELECT @vdate GO

    Este exemplo retorna o nome do usurio atual e o aplicativo que o usurio est utilizando para a sesso ou conexo atual. Neste exemplo, o usurio membro do cargo sysadmin. USE library SELECT user_name(), app_name() GO

    Este exemplo determina se a coluna firstname (nomes) da tabela member (membros) do banco de dados library permite valores nulos.

    Um resultado igual a zero (falso) significa que no so permitidos valores nulos e um resultado igual a 1 (verdadeiro) significa que so permitidos valores nulos.

    Observe que a funo OBJECT_ID est incorporada funo COLUMNPROPERTY. Isso permite obter a object id da tabela member. USE library SELECT COLUMNPROPERTY(OBJECT_ID('member'), 'firstname', 'AllowsNull') GO

    1.9 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

  • Banco de Dados II

    14

    operadores em condies de pesquisa. Ao combin-los, a ordem em que os operadores sero processados baseia-se em uma precedncia predefinida. {constante | nome_da_coluna | funo | (subconsulta)} [{operador_aritmtico | operador_de_seqncia_de_caracteres | AND | OR | NOT} {constante | nome_da_coluna | funo | (subconsulta)}.]

    Tipos de operadores

    O SQL Server oferece suporte para quatro tipos de operadores: aritmticos, de comparao, de concatenao de seqncias de caracteres e lgicos.

    Aritmtico Os operadores aritmticos efetuam clculos com colunas ou constantes numricas. O Transact-SQL dispe de suporte para operadores multiplicativos, incluindo multiplicao (*), diviso (/) e mdulo (%) . o resto inteiro de uma diviso de inteiros . e operadores aditivos, de adio (+) e subtrao (-). Comparao Os operadores de comparao comparam duas expresses. possvel efetuar comparaes entre variveis, colunas e expresses semelhantes. Voc encontrar os operadores a seguir.

    = Igual a > Maior que

    < Menor que

    >= Maior ou igual a

  • Banco de Dados II

    15

    Lgico Os operadores lgicos AND, OR e NOT conectam condies de pesquisa em clusulas WHERE.

    Nveis de precedncia dos operadores

    Se voc utilizar vrios operadores (lgicos ou aritmticos) para combinar expresses, o SQL Server processar os operadores na respectiva ordem de precedncia, o que pode afetar o valor resultante. Os operadores tm os seguintes nveis de precedncia (do superior para o inferior).

    Agrupamento Agrupamento primrio ( )

    Aritmtico Multiplicativo * / % Aritmtico Aditivo - +

    Outros Concatenao de

    seqncias de caracteres

    +

    Lgico NOT NOT Lgico AND AND

    Lgico OR OR

    O SQL Server trata primeiramente da expresso com o agrupamento mais interno. Alm disso, se todos os operadores aritmticos em uma expresso compartilharem o mesmo nvel de precedncia, a ordem ser da esquerda para a direita.

    Os nveis de precedncia dos operadores lgicos no SQL Server so diferentes dos de outras linguagens de programao.

    1.10 Expresses

    As expresses so uma combinao de smbolos e operadores que so avaliados como um valor de dados nico.

  • Banco de Dados II

    16

    Elas podem ser simples, como uma constante, varivel, coluna ou valor escalar. Ou expresses complexas criadas conectando-se uma ou mais expresses simples com operadores. O tipo de dados do resultado depende dos elementos contidos na expresso. As converses implcitas de tipos de dados so freqentemente executadas nos elementos da expresso durante a avaliao. O exemplo a seguir calcula o valor total de um produto em um pedido multiplicando o preo unitrio pela quantidade solicitada; depois, filtra os resultados para que os nicos registros retornados sejam os pedidos com produtos cujo valor total seja maior do que $ 10.000,00. USE northwind SELECT OrderID, ProductID ,(UnitPrice * Quantity) as ExtendedAmount FROM [Order Details] WHERE (UnitPrice * Quantity) > 10000 GO

    1.11 Elementos de linguagem de controle de fluxo

    O Transact-SQL contm vrios elementos de linguagem que controlam o fluxo da lgica em uma instruo. Ele tambm contm a funo CASE que permite usar uma lgica condicional em um nico registro de cada vez, em uma instruo SELECT ou UPDATE.

    Nvel de instruo

    Os elementos da linguagem a seguir permitem que voc controle o fluxo da lgica em um script: Estes elementos iniciam e encerram uma seqncia de instrues Transact-SQL para que sejam tratadas como uma unidade. Estes elementos especificam que o SQL Server deve executar a primeira alternativa se determinada condio for verdadeira. Caso contrrio, o SQL Server dever executar a segunda alternativa. Esses elementos executam uma instruo vrias vezes, enquanto a condio especificada for verdadeira. As instrues BREAK e CONTINUE controlam a operao das instrues dentro de um loop WHILE.

    Recue as instrues Transact-SQL em um bloco de controle de fluxo para melhorar a legibilidade.

  • Banco de Dados II

    17

    Este exemplo determina se um cliente possui algum pedido, antes de exclu-lo da lista de clientes.

    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

    Nvel de registro

    Uma funo CASE lista atributos, atribui um valor a cada atributo e testa cada um deles. Se a expresso na clusula WHEN retornar um valor verdadeiro, a funo CASE retornar a expresso na clusula THEN. Se a expresso for falsa e voc tiver especificado uma clusula ELSE, o SQL Server retornar o valor na clusula ELSE. Use uma funo CASE em qualquer local vlido para uma expresso. CASE expresso {WHEN expresso THEN resultado} [,.n] [ELSE resultado] END

    O exemplo a seguir declara uma varivel local, verifica se ela igual a 4, 5 ou 6 e, em caso afirmativo, percorre um loop WHILE que determina se o valor atual um nmero mpar ou par. DECLARE @n tinyint SET @n = 5 IF (@n BETWEEN 4 and 6) BEGIN WHILE (@n > 0)

  • Banco de Dados II

    18

    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

    Palavras-chave reservadas

    O SQL Server reserva certas palavras-chave para seu uso exclusivo. Por exemplo, o uso da palavra-chave DUMP ou BACKUP em uma sesso do SQL Query Analyzer (Analisador de consultas do SQL) ou do osql instrui o SQL Server a fazer uma cpia de backup de todo ou parte de um banco de dados ou do log. Voc no pode incluir palavras-chave reservadas em nenhum local de uma instruo Transact-SQL, exceto onde definido pelo SQL Server. Voc deve evitar nomear um objeto com uma palavra-chave reservada. Se o nome de um objeto coincidir com uma palavra-chave, voc dever coloc-lo entre identificadores de delimitao, como aspas ou colchetes [ ], sempre que fizer referncia ao objeto. Os cargos de administrador do banco de dados e de administrador de sistema, ou o criador do banco de dados, so normalmente responsveis pela verificao das palavras-chave reservadas em nomes de bancos de dados e instrues Transact-SQL.

    possvel construir instrues Transact-SQL sintaticamente corretas que podem ser compiladas e analisadas com xito, mas que ainda retornam um erro de tempo de execuo ao serem executadas. Recomenda-se no usar palavras-chave reservadas.

  • Banco de Dados II

    19

    Laboratrio Para realizar os exerccios deste material, baixe gratuitamente o banco de dados de exemplo NorthWind do site da Microsoft.

    1- Declare uma varivel para receber um valor numrico. Crie uma consulta que mostre as

    vendas (order) que esto a mdia est acima desta varivel 2- Calcule a soma das compras de cada cliente. Se metade do maior valor de um produto for

    menor que mdia exibir maior, se no exibir menor 3- Converta as datas das vendas para o formato dd-mm-aaaa e mostre a diferena entre as

    datas de pedido (RequiredDate) e data de envio (ShippedDate) 4- Mostre a maior venda de cada categoria de cada produto

    5- Mostre a menor venda de cada cliente separado por anos e meses

    6- Declare duas variveis e realize as quatro operaes matemticas bsicas

    7- Exiba as Regies dos empregados mostrando a mdia de vendas de cada categoria 8- Exiba a mdia de produtos vendidos por fornecedor

    9- Crie um lao que inicie no menor valor de um produto e termine no menor. Em cada passo deste lao deve ser exibido o nome do produto com este valor ou exibir a mensagem Sem produto neste valor

    10- Calcule a diferena entre as datas da ultima e penltima compra de cada cliente

  • Banco de Dados II

    20

    Unidade 2 - Implementando Views

    2.1 O que so Views

    As views permitem armazenar uma consulta predefinida como um objeto no banco de dados para uso posterior. As tabelas consultadas em uma view so chamadas tabelas base. Com algumas excees, voc pode nomear e armazenar qualquer instruo SELECT como uma view. Alguns exemplos comuns de views so:

    Um subconjunto de registros ou colunas de uma tabela base.

    Uma unio de duas ou mais tabelas base.

    Uma associao de duas ou mais tabelas base.

    Um resumo estatstico de uma tabela base.

    Um subconjunto de outra view ou alguma combinao de views e tabelas base.

    Este exemplo cria a view dbo.EmployeeView no banco de dados Northwind. A view exibe duas colunas da tabela Employees (Funcionrios).

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

  • Banco de Dados II

    21

    2.2 Vantagens das Views

    As views oferecem diversas vantagens, incluindo focalizar os dados para os usurios, mascarar a complexidade dos dados, simplificar o gerenciamento de permisses e organizar dados para serem exportados para outros aplicativos.

    Focalizar os dados para os usurios

    As views criam um ambiente controlado que permite o acesso a dados especficos enquanto outros dados ficam ocultos. Dados desnecessrios, confidenciais ou inadequados podem ser deixados fora de uma view. Os usurios podem manipular a exibio dos dados em uma view da mesma forma que em uma tabela. Alm disso, com as permisses apropriadas e algumas restries, eles podem modificar os dados produzidos pela view.

    Mascarar a complexidade do banco de dados

    As views isolam do usurio a complexidade do design do banco de dados. Isso permite que os desenvolvedores alterem o design sem afetar a interao do usurio com o banco de dados. Alm disso, os usurios podem ver uma verso mais amigvel dos dados usando nomes mais fceis de compreender do que os nomes abreviados geralmente usados nos bancos de dados. Consultas complexas, incluindo consultas distribudas a dados heterogneos, tambm podem ser mascaradas atravs de views. O usurio consulta a view em vez de escrever a consulta ou executar um script.

    Simplificar o gerenciamento de permisses de usurios

    Em vez de conceder permisso para que os usurios consultem colunas especficas em tabelas base, os proprietrios de bancos de dados podem conceder permisses para que os usurios consultem dados somente atravs de views. Isso tambm protege as alteraes no design das tabelas base subjacentes. Os usurios podem continuar a consultar a view sem interrupo.

    Melhorar o desempenho

    As views permitem que voc armazene os resultados de consultas complexas. Outras consultas podem usar esses resultados resumidos. As views tambm permitem o particionamento dos dados. Voc pode colocar parties individuais em computadores separados.

    Organizar dados para serem exportados para outros aplicativos

    Voc pode criar uma view com base em uma consulta complexa que associe duas ou mais tabelas e, depois, exportar os dados para outro aplicativo para anlise adicional.

  • Banco de Dados II

    22

    2.3 Criando views

    Voc pode criar views usando o Create View Wizard (Assistente para criao de views), o SQL Server Enterprise Manager (Gerenciador corporativo do SQL Server) ou o Transact-SQL. As views s podem ser criadas no banco de dados atual.

    Criando uma view

    Quando voc cria uma view, o Microsoft SQL Server verifica a existncia de objetos aos quais a definio da view faz referncia. O nome da view deve seguir as regras dos identificadores. A especificao do nome do proprietrio da view opcional. Voc deve desenvolver uma conveno de nomeao consistente para fazer a distino entre views e tabelas. Por exemplo, voc poderia adicionar a palavra view como um sufixo para cada objeto de view criado. Isso permite que voc diferencie facilmente objetos semelhantes (tabelas e views) ao consultar a view INFORMATION_SCHEMA.TABLES. CREATE VIEW proprietrio.nome_da_view [(coluna [,n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,n ]] AS instruo_select [WITH CHECK OPTION]

    Para executar a instruo CREATE VIEW, voc dever ser participante do cargo de administradores do sistema (sysadmin), do cargo de proprietrio do banco de dados (db_owner) ou do cargo de administrador de linguagem de definio de dados (db_ddladmin) ou dever ter a permisso CREATE VIEW. Voc tambm dever ter a permisso SELECT em todas as tabelas ou views s quais a view faz referncia. Para evitar situaes em que o proprietrio de uma view e o proprietrio das tabelas subjacentes sejam diferentes, recomenda-se que o usurio dbo possua todos os objetos de um banco de dados. Ao criar o objeto, especifique sempre o usurio dbo como o nome do proprietrio; caso contrrio, o objeto ser criado com o seu nome de usurio como o proprietrio do objeto.

    Especifique o contedo de uma view usando uma instruo SELECT. Com algumas limitaes, as views podem ser to complexas quanto voc desejar. Voc dever especificar nomes de colunas se: Quaisquer colunas da view derivam de uma expresso aritmtica, de uma funo interna ou de uma constante.

  • Banco de Dados II

    23

    Quaisquer colunas de tabelas que sero associadas compartilharem o mesmo nome.

    Quando voc cria views, importante testar a instruo SELECT que define a view para garantir que o SQL Server retorne o conjunto de resultados esperado. Depois de escrever e testar a instruo SELECT e verificar os resultados, crie a view.

    2.4 Restries s definies de views

    Ao criar views, considere as restries a seguir:

    A instruo CREATE VIEW no pode incluir as clusulas COMPUTE ou COMPUTE BY.

    A instruo CREATE VIEW no pode incluir a palavra chave 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.

    Este um exemplo de view que cria uma coluna (Subtotal) (Subtotal), que calcula os subtotais de um pedido com base nas colunas UnitPrice (Preo unitrio), Quantity (Quantidade) e Discount (Desconto). USE Northwind GO CREATE VIEW dbo.OrderSubtotalsView (OrderID, Subtotal) AS SELECT OD.OrderID, SUM(CONVERT (money,(OD.UnitPrice*Quantity*(1-Discount)/100))*100) FROM [Order Details] OD GROUP BY OD.OrderID GO

  • Banco de Dados II

    24

    Este exemplo consulta a view para ver os resultados.

    SELECT * FROM OrderSubtotalsView

    Freqentemente, voc cria 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

    2.5 Alterando e descartando views

    Freqentemente, voc altera as views em resposta a solicitaes de informaes adicionais feitas pelos usurios ou a alteraes na definio da tabela subjacente. Voc pode alterar uma view descartando-a e criando-a novamente ou executando a instruo ALTER VIEW.

    Alterando views

    A instruo ALTER VIEW altera a definio de uma view, incluindo views indexadas, sem afetar os disparadores ou procedimentos armazenados dependentes. Isso permite manter as permisses da view. Essa instruo est sujeita s mesmas restries que a instruo CREATE VIEW. Se descartar uma view e cri-la novamente, voc dever reatribuir permisses a ela.

  • Banco de Dados II

    25

    ALTER VIEW proprietrio.nome_da_view [(coluna [,...n ])] [WITH {ENCRYPTION | SCHEMABINDING | VIEW_METADATA} [,...n]] AS instruo_select [WITH CHECK OPTION] Se voc usar a opo WITH CHECK OPTION, WITH ENCRYPTION, WITH SCHEMABINDING ou WITH VIEW_METADATA

    O exemplo a seguir altera EmployeeView para adicionar a coluna Extension (Extenso).

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

    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.

    Descartando views

    Se no precisar mais de uma view, voc poder remover sua definio do banco de dados executando a instruo DROP VIEW. Ao descartar uma view, voc remove sua definio e todas as permisses atribudas a ela. Alm disso, se os usurios consultarem qualquer view que faa referncia view descartada, eles recebero uma mensagem de erro. No entanto, descartar uma tabela que faa referncia a uma view no descarta automaticamente a view. Voc deve descart-la explicitamente. A permisso para descartar uma view atribuda ao proprietrio da view e intransfervel. Esse o padro. No entanto, o administrador do sistema ou o proprietrio do banco de dados pode descartar qualquer objeto especificando o nome do proprietrio na instruo DROP VIEW.

  • Banco de Dados II

    26

    2.6 Ocultando definies de views

    Como os usurios podem exibir a definio de uma view usando o SQL Server Enterprise Manager, consultando INFORMATION_SCHEMA.VIEWS ou consultando a tabela do sistema syscomments, talvez voc deseje ocultar certas definies de views.

    Usar a opo WITH ENCRYPTION

    Voc pode criptografar as entradas da tabela syscomments que contm o texto da instruo CREATE VIEW especificando a opo WITH ENCRYPTION na definio de view. Antes de criptografar uma view, certifique-se de que a sua definio (script) seja salva em um arquivo. Para descriptografar o texto de uma view, voc deve descart-la e cri-la novamente ou alter-la e usar a sintaxe original. Neste exemplo, dbo.[Order Subtotals View] criada usando a opo WITH ENCRYPTION para ocultar a definio de view. USE Northwind GO CREATE VIEW dbo.[Order Subtotals View] WITH ENCRYPTION AS SELECT OrderID, Sum(CONVERT(money,(UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal FROM [Order Details] GROUP BY OrderID

  • Banco de Dados II

    27

    2.7 Modificando dados atravs de views

    As views no mantm uma cpia separada dos dados. Em vez disso, elas mostram o conjunto de resultados de uma consulta em uma ou mais tabelas base. Portanto, sempre que voc modifica dados em uma view, a tabela base que realmente modificada. Com algumas restries, voc poder inserir, atualizar ou excluir livremente dados de tabelas atravs de uma view. Em geral, a view deve ser definida em uma nica tabela e no deve incluir funes agregadas ou clusulas GROUP BY na instruo SELECT.

    Especificamente, as modificaes feitas com o uso de views:

    No podem afetar mais de uma tabela subjacente. Voc pode modificar views derivadas de duas ou mais tabelas, mas cada atualizao ou modificao pode afetar apenas uma tabela.

    No podem ser feitas em certas colunas.

    O SQL Server no permite que voc altere uma coluna que seja o resultado de um clculo, como as colunas que contm valores calculados, funes internas ou funes agregadas de registros.

    Podero ocasionar erros se afetarem colunas s quais a view no faz referncia.

    Por exemplo, voc receber uma mensagem de erro se inserir em uma view um registro que esteja definido em uma tabela com colunas s quais a view no faz referncia e que no permitem NULLs nem contm valores padro.

    Sero verificadas se a opo WITH CHECK OPTION tiver sido especificada na definio da view.

    A opo WITH CHECK OPTION fora todas as instrues de modificao de dados que so executadas na view a obedecer a certos critrios. Esses critrios so especificados na instruo SELECT que define a view. Se os valores alterados estiverem fora do intervalo da definio da view, o SQL Server rejeitar as modificaes.

    2.8 Otimizando o desempenho com o uso de views

    Esta seo descreve as consideraes sobre o desempenho para o uso de views e como as views permitem aperfeioar o desempenho atravs do armazenamento dos resultados de consultas complexas e do particionamento dos dados.

  • Banco de Dados II

    28

    Quando views que associam diversas tabelas e avaliam expresses complexas so aninhadas dentro de outra view, poder ser difcil determinar a origem imediata de qualquer problema de desempenho. Portanto, convm considerar a criao de definies de views separadas, em vez de aninhar views.

    No exemplo a seguir, TopSalesView consulta um subconjunto de registros de TotalPurchaseView.

    USE Northwind GO CREATE VIEW dbo.TopSalesView AS SELECT * FROM dbo.TotalPurchaseView WHERE Subtotal > 50000 GO

    A definio de view dbo.TopSalesView oculta a complexidade da consulta subjacente usada para criar TotalPurchaseView, que associa trs tabelas base.

    USE Northwind GO CREATE VIEW dbo.TotalPurchaseView AS SELECT CompanyName, Sum(CONVERT(money, (UnitPrice*Quantity*(1-Discount)/100))*100) AS Subtotal FROM Customers c INNER JOIN Orders o ON c.CustomerID=o.CustomerID INNER JOIN [Order Details] od ON o.OrderID = od.OrderID GROUP BY CompanyName GO

  • Banco de Dados II

    29

    Se os usurios tiverem problemas de desempenho ao executarem a consulta a seguir para listar os itens mais vendidos da empresa Ernst Handel, a origem do problema no estar imediatamente aparente. SELECT * FROM dbo.TopSalesView WHERE CompanyName = 'Ernst Handel'

    2.9 Usando views indexadas

    Voc pode criar ndices em views. Uma view indexada armazena o conjunto de resultados de uma view no banco de dados. Devido ao tempo rpido de recuperao, possvel usar views indexadas para melhorar o desempenho de consultas.

    Criando uma view indexada

    Crie uma view indexada implementando um ndice UNIQUE CLUSTERED em uma view. Os resultados da view so armazenados nas pginas do nvel folha do ndice de agrupamento. Depois de criar o ndice UNIQUE CLUSTERED, voc poder criar outros ndices nessa view. Uma view indexada reflete automaticamente as modificaes efetuadas nos dados das tabelas base. medida que os dados so alterados, o ndice UNIQUE CLUSTERED atualizado.

    Diretrizes para a criao de views indexadas

    O otimizador de consultas determina automaticamente se uma consulta se beneficiar do uso de uma view indexada. Isso ocorre mesmo que a consulta no faa referncia view indexada. Como prtica geral, deixe que o otimizador de consultas determine quando usar views indexadas. Usando o Index Tuning Wizard (Assistente para ajuste de ndice), voc pode melhorar significativamente sua capacidade de determinar a melhor combinao de ndices e views indexadas para otimizar o desempenho de consultas. Crie views indexadas quando:

    A melhoria de desempenho em termos da maior velocidade na recuperao dos resultados compensa o maior custo de manuteno.

    Os dados subjacentes no so atualizados com freqncia.

  • Banco de Dados II

    30

    As consultas executam uma quantidade significativa de associaes e agregaes que processam vrios registros ou so executadas freqentemente por vrios usurios.

    Restries criao de views indexadas

    Ao criar views indexadas, considere as restries a seguir:

    O primeiro ndice criado em uma view deve ser um ndice de agrupamento exclusivo.

    Voc deve criar a view com a opo SCHEMABINDING.

    A view pode fazer referncia a tabelas base, mas no a outras views.

    Voc deve usar nomes de duas partes para fazer referncia a tabelas e funes definidas pelo usurio.

    As conexes subseqentes devem ter as mesmas configuraes de opes para usar a view indexada.

    Voc deve usar a propriedade IsIndexable da funo OBJECTPROPERTY para certificar-se de que possa indexar uma view.

    2.10 Prticas recomendadas

    As prticas recomendadas a seguir devem ajud-lo a usar e gerenciar views em seus bancos de dados: Voc deve desenvolver uma conveno de nomeao consistente para fazer a distino entre views e tabelas. Especifique dbo como o proprietrio quando criar views. O dbo deve ser proprietrio de todos os objetos aos quais a definio de view faz referncia. Isso torna desnecessrio especificar o nome do proprietrio quando voc consulta a view porque o proprietrio do banco de dados o proprietrio padro. O proprietrio do banco de dados tambm tem permisso em todos os objetos subjacentes do banco de dados, evitando, assim, possveis cadeias de propriedades interrompidas. Verifique as dependncias dos objetos antes de descart-los do banco de dados. Execute o procedimento armazenado do sistema sp_depends ou exiba as dependncias no SQL Server Enterprise Manager para certificar-se de que no existam dependncias de um objeto que voc planeja descartar. Nunca exclua entradas da tabela do sistema syscomments. Se o seu aplicativo exigir que a definio no esteja visvel para outras pessoas, inclua a opo WITH ENCRYPTION com a instruo CREATE VIEW ou ALTER VIEW. Certifique-se de salvar a definio do script antes de criptograf-lo.

  • Banco de Dados II

    31

    Avalie cuidadosamente se voc deve criar views baseadas em views. Elas podem ocultar complexidades e poderiam ser a origem de problemas de desempenho.

    Laboratrio Crie as seguintes vises:

    1- Mostrando a mdia de dias entre as compras por cliente

    2- Mostrando para quantos clientes cada vendedor atende por dia

    3- Mostrando o produto mais vendido por ms 4- Mostrando a quantidade mdia de cada produto por cliente

    5- Mostrando a mdia de produtos de cada fornecedor por cliente

    6- Mostre o percentual de diferena entre a mdia e o maior valor de compra por cliente

    7- Mostre a diferena entre o maior e menor valor por regio

    8- Criptografe a viso que mostre o maior valor de item de cada compra 9- Calcule a diferena de dias entre a primeira e a ultima compra por vendedor

    10- Mostre a quantos dias cada produto no vendido

  • Banco de Dados II

    32

    Unidade 3 - Implementando Procedimentos Armazenados

    3.1 Definindo procedimentos armazenados

    Um procedimento armazenado uma coleo nomeada de instrues Transact-SQL que armazenada no servidor. Os procedimentos armazenados so um mtodo de encapsulamento de tarefas repetitivas. Eles oferecem suporte para variveis declaradas pelo usurio, execuo condicional e outros recursos avanados de programao. O SQL Server oferece suporte a cinco tipos de procedimentos armazenados: Armazenados no banco de dados master, os procedimentos armazenados do sistema (identificados pelo prefixo sp_) fornecem um mtodo eficaz para recuperar informaes das tabelas do sistema. Eles permitem que os administradores de sistema executem tarefas de administrao de banco de dados que atualizam as tabelas do sistema, mesmo que eles no tenham permisso para atualizar as diretamente tabelas subjacentes. Os procedimentos armazenados do sistema podem ser executados em qualquer banco de dados. Os procedimentos armazenados locais so criados em bancos de dados de usurio individuais.

    Os procedimentos armazenados temporrios podem ser locais, com nomes que comeam com um sinal de tralha nico (#), ou global, com nomes que iniciam com um sinal de tralha duplo (##). Os procedimentos armazenados temporrios esto disponveis em uma sesso de usurio nico; procedimentos armazenados globais esto disponveis para todas as sesses de usurios. Os procedimentos armazenados remotos so um recurso anterior do SQL Server. Agora as consultas distribudas do suporte a essa funcionalidade.

    Estes procedimentos so implementados como dynamic-link libraries (DLLs, bibliotecas de vnculos dinmicos) executadas fora do ambiente do SQL Server. Os procedimentos armazenados estendidos costumam ser identificados pelo prefixo xp_. Eles so executados de modo semelhante aos procedimentos armazenados. Os procedimentos armazenados do SQL Server assemelham-se aos procedimentos de outras linguagens de programao sob os seguintes aspectos: Contm instrues que executam operaes no banco de dados, incluindo a capacidade de chamar outros procedimentos armazenados. Aceitam parmetros de entrada.

    Retornam um valor de status para um lote ou procedimento armazenado de chamada para indicar um xito ou uma falha (e a razo da falha).

  • Banco de Dados II

    33

    Retornam vrios valores para o lote ou o procedimento armazenado de chamada na forma de parmetros de sada.

    3.2 Processamento inicial de procedimentos armazenados

    O processamento de um procedimento armazenado inclui a sua criao e, depois, sua execuo pela primeira vez, que coloca o plano de consulta respectivo no cache. O cache de procedimentos um conjunto de pginas que contm planos de execuo para todas as instrues Transact-SQL executadas no momento. O tamanho desse cache varia dinamicamente, de acordo com os nveis de atividade. O cache de procedimentos est localizado no pool de memria, que a unidade principal de memria do SQL Server. Ele contm a maioria das estruturas de dados que usa a memria no SQL Server.

    Criao

    Quando um procedimento armazenado criado, as instrues que ele contm so analisadas para verificar sua preciso sinttica. Depois, o SQL Server armazena o nome do procedimento armazenado na tabela do sistema sysobjects (objetos do sistema) e seu texto na tabela do sistema syscomments (comentrios do sistema), dentro do banco de dados atual. Ser retornado um erro se for encontrado um erro de sintaxe, e o procedimento armazenado no ser criado.

    Resoluo de nomes com atraso

    Um processo chamado resoluo de nomes com atraso permite que os procedimentos armazenados faam referncia a objetos que no existem quando o procedimento criado. Esse processo proporciona flexibilidade, visto que os procedimentos armazenados e os objetos aos quais eles fazem referncia no precisam ser criados em uma ordem especfica. Os objetos devero existir quando o procedimento armazenado for executado. A resoluo de nomes com atraso executada no momento em que o procedimento armazenado executado.

    Execuo (primeira vez ou recompilao)

  • Banco de Dados II

    34

    Na primeira vez que um procedimento armazenado executado ou se ele precisar ser recompilado, o processador de consultas o ler em um processo chamado resoluo. Certas alteraes efetuadas em um banco de dados podem tornar um plano de execuo ineficiente ou invlido. O SQL Server detecta essas alteraes e recompila automaticamente o plano de execuo quando ocorre uma das situaes a seguir: Uma alterao estrutural efetuada em uma tabela ou view qual a consulta (ALTER TABLE e ALTER VIEW) faa referncia. Novas estatsticas de distribuio so geradas explicitamente em uma instruo, como UPDATE STATISTICS, ou automaticamente. Um ndice usado pelo plano de execuo descartado.

    Alteraes significativas so efetuadas nas chaves (instruo INSERT ou DELETE) de uma tabela qual a consulta faa referncia.

    Otimizao

    Quando um procedimento armazenado passa com xito pelo estgio de resoluo, o otimizador de consultas do SQL Server analisa as instrues Transact-SQL do procedimento e cria um plano que contm o mtodo mais rpido de acesso aos dados. Para fazer isso, ele leva em considerao:

    O volume de dados das tabelas.

    A presena e a natureza dos ndices da tabela e a distribuio dos dados nas colunas indexadas.

    Os operadores e os valores de comparao usados nas condies da clusula WHERE.

    A presena de associaes e das clusulas UNION, GROUP BY ou ORDER BY.

    Compilao

    A compilao diz respeito ao processo de anlise do procedimento armazenado e de criao de um plano de execuo que armazenado no cache de procedimentos. Esse cache contm os planos de execuo de procedimentos armazenados mais importantes. Alguns dos fatores que aumentam o valor de um plano de execuo incluem:

    Tempo necessrio para a recompilao (alto custo de compilao).

    Uso freqente.

  • Banco de Dados II

    35

    3.3 Processamento subseqente de procedimentos armazenados

    O processamento subseqente de procedimentos armazenados mais rpido que o processamento inicial, pois o SQL Server usa o plano de consulta otimizado armazenado no cache de procedimentos.

    Se as condies a seguir se aplicarem, o SQL Server usar o plano armazenado na memria para executar a consulta posteriormente: _ O ambiente atual igual quele em que o plano foi compilado.

    As configuraes de servidor, banco de dados e conexo determinam o ambiente. Os objetos aos quais o procedimento armazenado faz referncia no precisam de resoluo de nomes. A resoluo de nomes necessria quando objetos pertencentes a usurios diferentes possuem nomes idnticos. Por exemplo, se o cargo sales for proprietrio de uma tabela Product (Produto) e o cargo development for proprietrio de uma tabela Product, o SQL Server dever determinar qual tabela dever ser consultada toda vez que uma tabela Product for referenciada.

    Os planos de execuo do SQL Server apresentam dois componentes principais: Plano de consulta a maior parte do plano de execuo encontra-se nessa estrutura de dados reentrante, somente leitura, que pode ser usada por inmeros usurios. Contexto de execuo cada usurio que est executando a consulta no momento possui essa estrutura de dados reutilizvel, que armazena os dados especficos de sua execuo, como os valores de parmetros. Se um usurio executar uma consulta, e uma das estruturas no estiver em uso, ela ser reinicializada com o contexto do novo usurio. Haver sempre, no mximo, um plano compilado no cache para cada combinao exclusiva de procedimento armazenado e ambiente. Podero existir vrios planos no cache para o mesmo procedimento armazenado se cada um se destinar a um ambiente diferente.

    Os fatores a seguir resultam em diferentes ambientes que afetam as escolhas de compilao:

    Planos compilados paralelos versus seriais.

    Propriedade implcita de objetos.

    Diferentes opes SET.

  • Banco de Dados II

    36

    3.4 Vantagens dos procedimentos armazenados

    Os procedimentos armazenados oferecem inmeras vantagens. Eles podem:

    Compartilhar a lgica do aplicativo com outros aplicativos, garantindo, dessa maneira, o acesso e a modificao consistente dos dados.

    Os procedimentos armazenados podem encapsular as regras de negcios. As regras ou polticas de negcios encapsulados nos procedimentos armazenados podem ser alteradas em um nico local. Todos os clientes podem usar os mesmos procedimentos armazenados para garantir o acesso e a modificao consistentes dos dados.

    Proteger os usurios da exposio aos detalhes das tabelas do banco de dados. Se um conjunto de procedimentos armazenados der suporte para todas as funes de negcios que os usurios precisam executar, eles nunca precisaro acessar as tabelas diretamente.

    Fornecer mecanismos de segurana. Os usurios podem receber permisso para executar um procedimento armazenado mesmo que no tenham permisso para acessar as tabelas ou views s quais o procedimento armazenado faz referncia.

    Melhorar o desempenho. Os procedimentos armazenados implementam vrias tarefas como uma srie de instrues Transact-SQL. A lgica condicional pode ser aplicada aos resultados das primeiras instrues Transact-SQL para determinar quais instrues Transact-SQL subseqentes sero executadas. Todas essas instrues Transact-SQL e a lgica condicional tornam-se parte de um nico plano de execuo no servidor.

    Reduzir o trfego de rede. Em vez de enviar centenas de instrues Transact-SQL atravs da rede, os usurios podem executar uma operao complexa enviando uma nica instruo, o que reduz o nmero de solicitaes transferidas entre o cliente e o servidor.

    3.5 Criando procedimentos armazenados

    Voc poder criar um procedimento armazenado somente no banco de dados atual com exceo de procedimentos armazenados temporrios, que so sempre criados no banco de dados tempdb. A criao de um procedimento armazenado semelhante criao de uma view. Em primeiro lugar, escreva e teste as instrues Transact-SQL que voc deseja incluir no procedimento armazenado. Depois, se receber os resultados esperados, crie o procedimento armazenado.

  • Banco de Dados II

    37

    Usando CREATE PROCEDURE

    Os procedimentos armazenados so criados com a instruo CREATE PROCEDURE. Considere os fatos a seguir ao cri-los:

    Os procedimentos armazenados podem fazer referncia a tabelas, views e procedimentos armazenados, bem como a tabelas temporrias.

    Se um procedimento armazenado criar uma tabela temporria local, essa tabela s existir em funo do procedimento e desaparecer aps ele ser executado.

    Uma instruo CREATE PROCEDURE no pode ser combinada com outras instrues SQL em um nico lote.

    A definio de CREATE PROCEDURE pode incluir qualquer quantidade e tipo de instrues Transact-SQL, com exceo das instrues de criao de objetos a seguir: CREATE DEFAULT, CREATE PROCEDURE, CREATE RULE, CREATE TRIGGER e CREATE VIEW. Outros objetos de banco de dados podem ser criados em um procedimento armazenado e devem ser qualificados com o nome do proprietrio do objeto.

    Para executar a instruo CREATE PROCEDURE, voc dever ser participante do cargo administradores do sistema (sysadmin), do cargo proprietrio do banco de dados (db_owner) ou do cargo administrador da Data Definition Language (DDL, linguagem de definio de dados) (db_ddladmin), ou ter a permisso CREATE PROCEDURE.

    O tamanho mximo de um procedimento armazenado 128 megabytes (MB), dependendo da memria disponvel.

    Sintaxe CREATE PROC[EDURE] nome_do_procedimento [;nmero] [{@parmetro tipo de dados} [VARYING] [= padro] [OUTPUT] ][,...n] [WITH {RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}] [FOR REPLICATION] AS instruo_sql [...n] As instrues a seguir criam um procedimento armazenado que lista todos os pedidos vencidos no banco de dados Northwind.

  • Banco de Dados II

    38

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

    3.6 Aninhando procedimentos armazenados

    Os procedimentos armazenados podem ser aninhados (um procedimento armazenado chama outro). As caractersticas do aninhamento incluem:

    Os procedimentos armazenados podem ser aninhados em at 32 nveis. A tentativa de exceder esse limite far com que toda a chamada em cadeia de procedimentos falhe.

    O nvel de aninhamento atual armazenado na funo do sistema @@nestlevel.

    Se um procedimento armazenado chamar um segundo procedimento armazenado, esse poder acessar todos os objetos criados pelo primeiro, incluindo as tabelas temporrias.

    Os procedimentos armazenados aninhados podem ser recursivos. Por exemplo, o Procedimento armazenado X pode chamar o Procedimento armazenado Y. Enquanto o Procedimento armazenado Y est sendo executado, ele pode chamar o Procedimento armazenado X.

    3.7 Diretrizes para a criao de procedimentos armazenados

    Considere as diretrizes a seguir ao criar procedimentos armazenados:

    Para evitar situaes em que o proprietrio de um procedimento armazenado e o proprietrio das tabelas subjacentes sejam diferentes, recomendado que o usurio dbo possua todos os objetos do banco de dados. Como um usurio pode ser participante de vrios cargos, especifique sempre o usurio dbo como o nome do proprietrio ao criar o objeto. Caso contrrio, o objeto ser criado tendo o seu nome de usurio como o proprietrio:

    Voc tambm deve ter as permisses apropriadas em todas as tabelas ou views s quais o procedimento armazenado faz referncia.

  • Banco de Dados II

    39

    Evite situaes em que o proprietrio de um procedimento armazenado e o proprietrio das tabelas subjacentes sejam diferentes. Se estiver criando um procedimento armazenado do sistema definido pelo usurio, voc dever ter efetuado login como um participante do cargo administradores do sistema (sysadmin) e usar o banco de dados master.

    Crie cada procedimento armazenado para realizar uma nica tarefa.

    Crie, teste e depure seu procedimento armazenado no servidor; depois, teste-o no cliente.

    Para distinguir facilmente os procedimentos armazenados do sistema, evite usar o prefixo sp_ ao atribuir nomes a procedimentos armazenados locais.

    Todos os procedimentos armazenados devem assumir as mesmas configuraes de conexo.

    Minimize o uso de procedimentos armazenados temporrios para evitar a disputa por recursos nas tabelas do sistema de tempdb, o que poder ocasionar um impacto negativo no desempenho.

    Use sp_executesql em vez de usar a instruo EXECUTE para executar dinamicamente uma seqncia em um procedimento armazenado. sp_executesql mais eficiente, pois gera planos de execuo que o SQL Server tem mais probabilidade de reutilizar. O SQL Server compila a instruo ou instrues Transact-SQL na seqncia de caracteres em um plano de execuo separado do plano de execuo do procedimento armazenado. Voc pode usar o sp_executesql quando estiver executando uma instruo Transact-SQL vrias vezes, se a nica variao estiver nos valores de parmetro fornecidos na instruo Transact-SQL.

    Nunca exclua entradas diretamente da tabela do sistema syscomments. Para que os usurios no possam exibir o texto de seus procedimentos armazenados, crie-os usando a opo WITH ENCRYPTION. Se voc no usar essa opo, os usurios podero usar o SQL Server Enterprise Manager (Gerenciador corporativo do SQL Server) ou executar o procedimento armazenado do sistema sp_helptext para exibir o texto dos procedimentos armazenados localizados na tabela do sistema syscomments.

    3.8 Executando procedimentos armazenados

    Voc pode executar um procedimento armazenado isoladamente ou como parte de uma instruo INSERT. necessrio ter a permisso EXECUTE no procedimento armazenado.

  • Banco de Dados II

    40

    Executando um procedimento armazenado isoladamente

    Voc pode executar um procedimento armazenado emitindo a instruo EXECUTE junto com o nome do procedimento e quaisquer parmetros. [[EXEC [UTE]] { [@status_do_retorno =] {nome_do_procedimento [;nmero] | @ var_nome_do_procedimento} } [[@parmetro = {valor | @varivel [OUTPUT] | [DEFAULT]] [,...n] [WITH RECOMPILE]

    A instruo a seguir executa um procedimento armazenado que lista todos os pedidos vencidos no banco de dados Northwind. EXEC OverdueOrders

    Executando um procedimento armazenado em uma instruo INSERT

    A instruo INSERT pode preencher uma tabela local com um conjunto de resultados que retornado de um procedimento armazenado local ou remoto. O SQL Server carrega a tabela com dados que so retornados das instrues SELECT do procedimento armazenado. A tabela j dever existir, e os tipos de dados devero coincidir. As instrues a seguir criam o procedimento armazenado EmployeeCustomer, que insere funcionrios na tabela Customers (Clientes) do banco de dados Northwind. USE northwind GO CREATE PROC dbo.EmployeeCustomer AS

  • Banco de Dados II

    41

    SELECT UPPER(SUBSTRING(lastname, 1, 4)+SUBSTRING(FirstName, 1,1)), 'Northwind Traders', RTRIM(FirstName)+' '+LastName, 'Employee', Address, City, Region, PostalCode, Country, ('(206) 555-1234'+' x'+Extension), NULL FROM Employees WHERE HireDate = GETDATE () GO

    As instrues a seguir executam o procedimento armazenado EmployeeCustomer. INSERT INTO Customers EXEC EmployeeCustomer O nmero de funcionrios contratados na data de hoje adicionado tabela

    3.9 Alterando procedimentos armazenados

    Para modificar um procedimento armazenado existente e manter as atribuies de permisso, use a instruo ALTER PROCEDURE. O SQL Server substitui a definio anterior do procedimento armazenado quando ele alterado com ALTER PROCEDURE. altamente recomendvel no modificar diretamente os procedimentos armazenados do sistema. Em vez disso, crie um procedimento armazenado do sistema definido pelo usurio copiando as instrues de um procedimento armazenado do sistema existente e, depois, modifique-o de acordo com suas necessidades. Considere os fatos a seguir ao usar a instruo ALTER PROCEDURE: Para modificar um procedimento armazenado que tenha sido criado com quaisquer opes, como WITH ENCRYPTION, inclua a opo na instruo ALTER PROCEDURE para manter a funcionalidade fornecida pela opo. ALTER PROCEDURE altera apenas um nico procedimento. Se o seu procedimento chamar outros procedimentos armazenados, os procedimentos armazenados aninhados no sero afetados. A permisso para executar essa instruo assume, por padro, os criadores do procedimento armazenado inicial, os participantes do cargo do servidor sysadmin e os participantes dos cargos fixos de bancos de dados db_owner e db_ddladmin. Voc no pode conceder permisso para executar ALTER PROCEDURE.

  • Banco de Dados II

    42

    ALTER PROC[EDURE] nome_do_procedimento [;nmero] [{@parmetro tipo_de_dados} [VARYING] [= padro] [OUTPUT] ] [,...n] [WITH {RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [FOR REPLICATION] AS instruo_sql [...n]

    O exemplo a seguir modifica o procedimento armazenado OverdueBooks para selecionar somente nomes de colunas especficas em vez de todas as colunas da tabela Orders (Pedidos), bem como para classificar o conjunto de resultados. USE Northwind GO ALTER PROC dbo.OverdueOrders AS SELECT CONVERT(char(8), RequiredDate, 1) RequiredDate, CONVERT(char(8), OrderDate, 1) OrderDate, OrderID, CustomerID, EmployeeID FROM Orders WHERE RequiredDate < GETDATE() AND ShippedDate IS Null ORDER BY RequiredDate GO

  • Banco de Dados II

    43

    3.10 Descartando procedimentos armazenados

    Use a instruo DROP PROCEDURE para remover os procedimentos armazenados definidos pelo usurio do banco de dados atual. Antes de descartar um procedimento armazenado, execute o procedimento armazenado sp_depends para determinar se os objetos dependem do procedimento. DROP PROCEDURE {procedimento} [,...n] Este exemplo descarta o procedimento armazenado OverdueOrders. USE Northwind GO DROP PROC dbo.OverdueOrders GO

    3.11 Usando parmetros em procedimentos armazenados

    Usando parmetros de entrada

    Os parmetros de entrada permitem passar informaes para um procedimento armazenado. Para definir um procedimento armazenado que aceite parmetros de entrada, declare uma ou mais variveis como parmetros na instruo CREATE PROCEDURE. @parmetro tipo_de_dados [= padro] Considere os fatos e as diretrizes a seguir ao especificar parmetros:

    Todos os valores de parmetros de entrada devem ser verificados no incio de um procedimento armazenado para interceptar primeiro valores ausentes e invlidos.

    Voc deve fornecer valores padro apropriados para um parmetro. Se for definido um padro, os usurios podero executar o procedimento armazenado sem especificar um valor para esse parmetro.

    Os padres de parmetros devem ser constantes ou NULL. Ao especificar NULL como um valor padro de um parmetro, voc deve usar =Null; IS NULL no funcionar, pois a sintaxe no oferece suporte designao ANSI NULL.

    O nmero mximo de parmetros em um procedimento armazenado 1.024.

  • Banco de Dados II

    44

    O nmero mximo de variveis locais em um procedimento armazenado limitado somente pela memria disponvel.

    Os parmetros so locais a um procedimento armazenado. Os mesmos nomes de parmetros podem ser usados em outros procedimentos armazenados.

    As informaes sobre parmetros so armazenadas na tabela do sistema syscolumns (colunas do sistema).

    O exemplo a seguir cria o procedimento armazenado Year to Year Sales, que retorna todas as vendas entre as datas especficas. CREATE PROCEDURE dbo.[Year to Year Sales] @BeginningDate DateTime, @EndingDate DateTime AS IF @BeginningDate IS NULL OR @EndingDate IS NULL BEGIN RAISERROR('NULL values are not allowed', 14, 1) RETURN END SELECT O.ShippedDate, O.OrderID, OS.Subtotal, DATENAME(yy,ShippedDate) AS Year FROM ORDERS O INNER JOIN [Order Subtotals] OS ON O.OrderID = OS.OrderID WHERE O.ShippedDate BETWEEN @BeginningDate AND @EndingDate GO

  • Banco de Dados II

    45

    Executando procedimentos armazenados com parmetros de entrada

    Voc pode definir o valor de um parmetro passando o valor para o procedimento armazenado por nome de parmetro ou por posio. Voc no deve misturar formatos diferentes ao fornecer os valores. A especificao de um parmetro em uma instruo EXECUTE no formato @parmetro = valor denominada de passagem por nome do parmetro. Quando voc passa valores por nome de parmetro, os valores dos parmetros podem ser especificados em qualquer ordem, e possvel omitir os parmetros que permitem valores nulos ou que possuem um padro. O valor padro de um parmetro, se definido no procedimento armazenado, usado quando:

    Nenhum valor especificado para o parmetro quando o procedimento armazenado executado.

    A palavra-chave DEFAULT especificada como o valor do parmetro.

    [.[ EXEC [ UTE ] ] { [@status_do_retorno =] {nome_do_procedimento [;nmero] | @ var_nome_do_procedimento} } [[@parmetro = {valor | @varivel [OUTPUT] | [DEFAULT]] [,...n] [WITH RECOMPILE]

    O exemplo parcial a seguir cria o procedimento armazenado AddCustomer, que adiciona um novo cliente ao banco de dados Northwind. Observe que todas as variveis, exceto CustomerID e CompanyName so especificadas para permitir um valor nulo. USE Northwind GO CREATE PROCEDURE dbo.AddCustomer @CustomerID nchar (5), @CompanyName nvarchar (40),

  • Banco de Dados II

    46

    @ContactName nvarchar (30) = NULL, @ContactTitle nvarchar (30) = NULL, @Address nvarchar (60) = NULL, @City nvarchar (15) = NULL, @Region nvarchar (15) = NULL, @PostalCode nvarchar (10) = NULL, @Country nvarchar (15) = NULL, @Phone nvarchar (24) = NULL, @Fax nvarchar (24) = NULL AS

    O exemplo a seguir passa valores por nome de parmetro para o procedimento armazenado AddCustomer. Observe que a ordem dos valores diferente da instruo CREATE PROCEDURE. Observe, tambm, que os valores dos parmetros @Region e @Fax no so especificados. Se as colunas Region (Regio) e Fax na tabela permitirem valores nulos, o procedimento armazenado AddCustomer ser executado com xito. No entanto, se as colunas Region e Fax no permitirem valores nulos, voc deve passar um valor para um parmetro, independentemente de voc ter definido o parmetro para permitir um valor nulo. EXEC AddCustomer @CustomerID = 'ALFKI', @ContactName = 'Maria Anders', @CompanyName = 'Alfreds Futterkiste', @ContactTitle = 'Sales Representative', @Address = 'Obere Str. 57', @City = 'Berlin', @PostalCode = '12209', @Country = 'Germany', @Phone = '030-0074321'

  • Banco de Dados II

    47

    A passagem somente de valores (sem uma referncia aos parmetros para os quais eles esto sendo passados) denominada passagem de valores por posio. Quando voc especifica somente um valor, os valores dos parmetros devem ser listados na ordem em que esto definidos na instruo CREATE PROCEDURE. Ao passar valores por posio, voc poder omitir os parmetros quando existirem padres, mas no poder interromper a seqncia. Por exemplo, se um procedimento armazenado tiver cinco parmetros, voc poder omitir o quarto e o quinto parmetros, mas no poder omitir o quarto parmetro e especificar o quinto. O script a seguir passa valores por posio para o procedimento armazenado AddCustomer. Observe que os parmetros @Region e @Fax no tm valores. No entanto, somente o parmetro @Region fornecido com NULL. O parmetro @Fax omitido porque ele o ltimo parmetro. EXEC AddCustomer 'ALFKI2', 'Alfreds Futterkiste', 'Maria Anders', 'Sales Representative', 'Obere Str. 57', 'Berlin', NULL, '12209', 'Germany', '030-0074321'

    3.12 Retornando valores com parmetros de sada

    Os procedimentos armazenados podem retornar informaes para o cliente ou o procedimento armazenado de chamada com parmetros de sada (variveis designadas com a palavra-chave OUTPUT). Com o uso de parmetros de sada, quaisquer alteraes no parmetro que resultem da execuo do procedimento armazenado podero ser retidas, mesmo aps sua execuo ser concluda. Para usar um parmetro de sada, a palavra-chave OUTPUT dever ser especificada nas instrues CREATE PROCEDURE e EXECUTE. Se essa palavra-chave for omitida quando o procedimento armazenado for executado, ele ainda ser executado, mas no retornar um valor. Os parmetros de sada apresentam as seguintes caractersticas: A instruo de chamada deve conter um nome de varivel para receber o valor de retorno. No possvel passar constantes. Voc poder usar a varivel posteriormente em instrues Transact-SQL adicionais, no procedimento armazenado de chamada ou no lote. O parmetro pode ser qualquer tipo de dados, exceto text ou image.

    Eles podem ser espaos reservados para o cursor.

  • Banco de Dados II

    48

    Este exemplo cria um procedimento armazenado MathTutor que calcula o produto de dois nmeros. Este exemplo usa a instruo SET. No entanto, voc tambm pode usar a instruo SELECT para concatenar uma seqncia dinamicamente. Uma instruo SET requer que voc declare uma varivel para imprimir a seqncia The result is: CREATE PROCEDURE dbo.MathTutor @m1 smallint, @m2 smallint, @result smallint OUTPUT AS SET @result = @m1* @m2 GO

    Este lote chama o procedimento armazenado MathTutor e passa os valores de 5 e 6. Esses valores se tornam variveis, que so fornecidas na instruo SET. DECLARE @answer smallint EXECUTE MathTutor 5,6, @answer OUTPUT SELECT 'The result is:', @answer

    O parmetro @result designado com a palavra chave OUTPUT. O SQL Server imprime o contedo da varivel @result quando voc executa o procedimento armazenado MathTutor. A varivel do resultado definida como o produto de dois valores, 5 e 6.

    3.13 Recompilando explicitamente procedimentos armazenados

    Os procedimentos armazenados podem ser recompilados explicitamente, mas voc no deve fazer isso com freqncia. Use esse procedimento somente quando:

    Os valores de parmetros so passados para um procedimento armazenado que retorna conjuntos de resultados muito variados.

  • Banco de Dados II

    49

    Um novo ndice adicionado a uma tabela subjacente da qual um procedimento armazenado poder se beneficiar.

    O valor do parmetro fornecido atpico. O SQL Server fornece trs mtodos para a recompilao explcita de um procedimento armazenado.

    CREATE PROCEDURE...[WITH RECOMPILE]

    A instruo CREATE PROCEDURE...[WITH RECOMPILE] indica que o SQL Server no armazena no cache um plano para esse procedimento armazenado. Em vez disso, a opo recompila o procedimento armazenado toda vez que ele executado. A instruo a seguir cria um procedimento armazenado chamado OrderCount que recompilado toda vez que executado. USE Northwind GO CREATE PROC dbo.OrderCount @CustomerID nchar (10) WITH RECOMPILE AS SELECT count(*) FROM [Orders Qry] WHERE CustomerID = @CustomerID GO

    EXECUTE...[WITH RECOMPILE]

    A instruo EXECUTE...[WITH RECOMPILE] cria um novo plano de execuo cada vez que o procedimento executado, se voc especificar WITH RECOMPILE. O novo plano de execuo no colocado no cache. Use essa opo se o parmetro que voc est passando for muito diferente dos que geralmente so passados para o procedimento armazenado. Como esse plano otimizado uma exceo e no a regra, quando a execuo for concluda, voc dever executar novamente o procedimento armazenado com um parmetro que seja passado normalmente. Essa opo tambm ser til se os dados tiverem sido significativamente alterados desde que o procedimento armazenado foi compilado pela ltima vez. Este exemplo recompila o procedimento armazenado do sistema sp_help no momento em que ele executado.

  • Banco de Dados II

    50

    EXEC sp_help WITH RECOMPILE

    sp_recompile

    O procedimento armazenado do sistema sp_recompile recompila o procedimento armazenado do sistema ou disparador especificado na prxima vez que ele executado.