Apostila SQL Server 2005

Published on May 2016 | Categories: Documents | Downloads: 70 | Comments: 0 | Views: 471
of 88
Download PDF   Embed   Report

Comments

Content

Curso Microsoft SQL Server 2005

Utilizando a Linguagem Transact SQL

MICROSOFT SQL SERVER 2005

ÍNDICE
1. 2. 3. INTRODUÇÃO .................................................................................................................................. 4 CONHECENDO O MICROSOFT SQL SERVER 2005 ................................................................ 5 PREPARANDO PARA INSTALAR O SQL SERVER 2005.......................................................... 6 2.1 REQUISITOS DE HARDWARE DO SQL SERVER 2005................................................................ 8 2.1.1 REQUISITOS DE PROCESSADOR ............................................................................................ 8 2.1.2 REQUISITOS DE MEMÓRIA ..................................................................................................... 8 2.1.3 REQUISITOS DE DISCO RÍGIDO ............................................................................................. 8 2.2 SQL SERVER MANAGEMENT STUDIO ...................................................................................... 9 PROFILER ............................................................................................ Erro! Indicador não definido. SQL – SERVER BOOKS ON-LINE ....................................................... Erro! Indicador não definido. 4. 5. OS DATABASES DO SQL-SERVER ............................................................................................ 12 CRIAÇÃO DE UM DATABASE .................................................................................................... 18

5. INSERT (INSERE REGISTRO) ......................................................................................................... 29 6. UPDATE (ALTERA VALOR DO REGISTRO) ............................................................................... 30 7. DELETE (EXCLUSÃO DE REGISTROS) ....................................................................................... 32 8. APRESENTANDO O SISTEMA INFONEW .................................................................................... 33 8.1 OS OBJETIVOS GERAIS DO INFONEW SÃO: ......................................................................... 33 PARTE 1 – MANTER DADOS A RESPEITO DOS CLIENTES DA EMPRESA..................................................... 33 PARTE 2 – ANÁLISE DO CREDITO DO CLIENTE ........................................................................................ 34 PARTE 3 – MANTER DADOS A RESPEITO DOS PRODUTOS A SERREM VENDIDOS...................................... 34 PARTE 4 – MANTER E GERENCIAR OS PEDIDOS DE COMPRA FEITOS PELOS CLIENTES............................. 35 PARTE 5 – MANTER DADOS A RESPEITO DOS FUNCIONÁRIOS ................................................................. 35 8.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW ...................................... 36 9. SELECT (CONSULTA) ...................................................................................................................... 37 9.1 ORDER BY (ORDEM DE RETORNO) .................................................................................................. 38 9.2 ALIAS (APELIDO) ............................................................................................................................. 39 9.3 WHERE (RESTRIÇÕES) ..................................................................................................................... 40 9.4 BETWEEN (CONDIÇÃO COM UMA FAIXA DE VALORES) ................................................................... 41 9.5 LIKE (COMPARAÇÃO COM UMA PARTE DE UMA LITERAL) ................................................................ 42 9.6 DISTINCT (VALORES ÚNICOS) ................................................................................................... 43 9.7 IN (CONDIÇÃO COM VALORES FIXOS) ................................................................................... 44 10. FUNÇÕES DE AGRUPAMENTO ................................................................................................... 45 10.1 COUNT (CONTADOR DE REGISTROS) .............................................................................................. 45 10.1.1 GROUP BY (Agrupamento de dados) ..................................................................................... 46 10.2 SUM (SOMATÓRIA DE VALORES) .................................................................................................... 47 10.3 AVG (MÉDIA DE VALORES) ............................................................................................................ 48 10.4 MIN, MAX (MENOR E MAIOR VALOR) ............................................................................................ 49 11.HAVING (CONDIÇÃO DO AGRUPAMENTO) ............................................................................. 50

Banco de Dados
Autor: Nilson A. Borges 2 de 88

MICROSOFT SQL SERVER 2005
12. JOIN (RELACIONAMENTO DE TABELAS) ............................................................................... 51 12.1 INTRODUÇÃO A JOINS: .................................................................................................................... 51 12.2 TIPOS DE JOINS ........................................................................................................................... 51 12.2.1 Usando Inner Joins: ................................................................................................................ 51 12.2.2 Usando Outer Joins:............................................................................................................... 52 12.2.3. Usando Cross Joins:............................................................................................................... 53 12.3 COMBINAÇÃO DE MAIS DE 2 TABELAS ............................................................................................. 54 13. IN (CONDIÇÃO COM VALORES FIXOS) .................................................................................... 55 4. SUBQUERIES (PESQUISA DENTRO DE UM COMANDO) ........................................................ 56 15. CRIANDO VISÕES (VIEW) ............................................................................................................. 58 16. CRIANDO STORED PROCEDURE (PROCEDIMENTOS) ...................................................... 60 16.1 STORED PROCEDURE (PARÂMETROS DE SAÍDA): ............................................................................ 62 17. CRIANDO FUNCTION (UDF :FUNCÕES DEFINIDAS PELO O USUÁRIO ) ......................... 69 17.1 DEFININDO UMA FUNCTION UDF: ................................................................................................... 70 17.2 TIPOS DE FUNCTION:....................................................................................................................... 72 17.2.1. Funções Scalar valued: .......................................................................................................... 72 17.2.2. Funções Table Valued: ........................................................................................................... 73 17.2.3. Funções Multi-Statement Table Valued: ................................................................................ 76 18. CRIANDO TRIGGERS (GATILHOS ) ........................................................................................... 78

Banco de Dados
Autor: Nilson A. Borges 3 de 88

MICROSOFT SQL SERVER 2005

1. INTRODUÇÃO
Veremos nesta apostila de forma simplificada os comandos de manipulação e consultas de dados, bem como suas clausulas, operadores e funções. Para isso estaremos utilizando o gerenciador de banco de dados Microsoft SQL Server 2005. O comando Transact-SQL é uma linguagem estruturada para consultas, utilizada no banco de dados da Microsoft, o SQL Server 2005. Veja em seguida uma lista dos comandos Transact – SQL.

DCL – Data Control Language – Linguagem de Controle de Dados. GRANT Concede permissões. DENY Nega permissões. REVOKE Revoga a concessão ou a negação de permissão. DDL- Data Definition Language- Linguagem de Definição de dados. CREATE Cria objeto no sistema. ALTER Altera a estrutura dos objetos. DROP Elimina objetos do sistema. DML- Data Manipulation Language – Linguagem de Manipulação de Dados. SELECT Lê dados de tabelas e views. INSERT Insere dados em tabelas. UPDATE Altera dados da tabela. DELETE Exclui dados das tabelas. BACKUP Realiza backup de dados. RESTORE Restaura dados de um backup BULK INSERT Realiza a inclusão de grande quantidade de dados em uma tabela.

Banco de Dados
Autor: Nilson A. Borges 4 de 88

MICROSOFT SQL SERVER 2005

2. Conhecendo o Microsoft SQL Server 2005
O Microsoft SQL Server 2005 é um gerenciador de Banco de Dados que pode ser implementado em sistemas de duas ou mais camadas. Para a implementação de sistemas ele contém a linguagem Transact-SQL que segue o padrão SQL-92. Ele possui as estruturas adequadas para que você crie e gerencie sistemas de Banco de Dados OLTP (On-Line Transaction Processing) Processamento Baseado em Transações e Banco de Dados OLAP (On-Line Analytical Processing) Processamento Baseado em Análise dos Dados, sistema de Tomada de Decisão (DW). Além de o software oferecer mecanismos suficientes para que você possa implementar sistemas íntegros e consistentes com relação aos seus dados, ele oferece algumas ferramentas gráficas e alguns assistentes que facilitam o gerenciamento do sistema. Com estas ferramentas você poderá: • • Criar e configurar Databases e seus objetos; Transformar dados que estão em um determinado formato em outro e transferir dados que estão em um determinado sistema para o SQL Server 2005 e vice-versa; • • • • • Implementar replicação dos dados entre dois ou mais servidores; Realizar Transações distribuídas em dois ou mais servidores; Criar tarefas que devem ser executadas automaticamente com base em horários ou na ocorrência de erros; Implementar a segurança de acesso aos dados, limitando as atividades dos usuários dentro do database; Realizar cópias de segurança dos seus dados para que, se algum problema acontecer no sistema, essas cópias possam ser restauradas, evitando assim perda de informações; • • • • Transformar dados n o formato XML; Gerenciar os processos realizados pelo próprio SQL Server 2005; Controlar locks; Analisar o processamento de pesquisas para ajustar a performance delas; Banco de Dados
Autor: Nilson A. Borges 5 de 88

MICROSOFT SQL SERVER 2005
• • • • • Realizar o “debug” de suas stored procedures; Trabalhar com várias instances do SQL SERVER 2005 no mesmo servidor; Criar Databases com collations diferentes uns dos outros; Criar as colunas das tabelas, do tipo caractere, com collations diferentes; Trabalhar com datatypes Unicode, etc.

3. PREPARANDO PARA INSTALAR O SQL SERVER 2005

O SQL SERVER 2005 está disponível em várias edições, cada qual adequada a uma tarefa ou um ambiente específico. É importante entender as diferenças entre as edições disponíveis, de modo que você possa selecionar a mais apropriada para suas necessidades: •

Enterprise Edition: Uma edição abrangente do SQL SERVER desenvolvida para oferecer níveis extremamente altos de escalabilidade e desempenho. Use essa edição em aplicações de missão crítica em nível empresarial e de larga escala. O Enterprise Edition contém todos os recursos do Standard Edition,

além de recursos empresariais, incluindo: a) Cluster de failover b) Espelhamento de Banco de Dados c) Bancos de Dados de instantâneos d) Backups espelhados e) Restauração online de páginas e arquivos f) Modos de exibição particionados distribuídos g) Replicação heterogênea h) Replicação ponto a ponto Banco de Dados
Autor: Nilson A. Borges 6 de 88

MICROSOFT SQL SERVER 2005



Standard Edition : Desenvolvido para aplicações em nível de departamento. Use essa edição se você não precisar dos níveis de escalabilidade, desempenho e disponibilidade oferecidos pela Enterprise Edition.



Workgroup Edition: Uma versão do SQL SERVER 2005 para organizações de pequeno porte que precisam de um Banco de Dados sem limites de tamanho e números de usuários. A Workgroup Edition pode atuar como um servidor Web front-end ou ser usada em operações departamentais ou de filiais. Essa edição é um Banco de dados ideal para iniciantes, além de ser confiável, eficiente e fácil de gerenciar.



Expression Edition: Uma versão do SQL SERVER 2005 destinada a clientes desconectados ou aplicativos autônomos.



Compact

Edition:

Um

Banco

de

dados

móvel

que

oferece

gerenciamento de dados empresariais para dispositivos inteligentes. Essa edição é capaz de replicar dados no SQL SERVER 2005 e no SQL SERVER 2000, permitindo que os usuários mantenham um

armazenamento de dados móveis que eles podem sincronizar dados empresariais.



Developer Edition: Inclui toda a funcionalidade do Enterprise Edition, mas é licenciada para uso como um sistema de desenvolvimento e teste, e não como um servidor de produção. Use essa edição para desenvolver e testar soluções de Banco de Dados. É possível atualizá-la para a Enterprise Edition para fins de produção.

Banco de Dados
Autor: Nilson A. Borges 7 de 88

MICROSOFT SQL SERVER 2005

2.1 REQUISITOS DE HARDWARE DO SQL SERVER 2005
Ao planejar uma instalação do SQL SERVER 2005, você deve garantir que o computador em que pretende instalar esse programa atenda aos requisitos míninos de hardware e seja adequado às suas necessidades atuais e futuras. Se as especificações mínimas não forem atendidas, poderá haver falha na instalação de alguns ou de todos os componentes.

2.1.1 REQUISITOS DE PROCESSADOR
O processador no computador em que você pretende instalar o SQL SERVER deve ser compatível com Intel Pentium III ou superior e possuir velocidade de 600 MHz ou superior. A Microsoft recomenda usar um processador de 1 GHz ou superior.

2.1.2 REQUISITOS DE MEMÓRIA
O SQL-Server 2005 necessita de no mínimo de 512 Mb de memória, além da necessária para o sistema para o sistema operacional. A Microsoft recomenda pelo menos 1 Gigabyte (GB). O SQL SERVER 2005 Express Edition requer no mínimo de 192 MB de memória. A Microsoft recomenda pelo menos 512 MB.

2.1.3 REQUISITOS DE DISCO RÍGIDO
Os componentes de banco de dados do SQL SERVER 2005 requerem entre 150 e 746 MB de espaço em disco, dependendo das opções especificas escolhidas. Uma instalações típicas requer 637 MB de espaço em disco. Se você optar por instalar o SQL SERVER 2005 Analysis Services, será necessário espaço em disco adicional de 35 MB. Se você optar por instalar o SQL SERVER 2005 Reporting Services, será necessário um espaço em disco adicional de 40 MB.

Banco de Dados
Autor: Nilson A. Borges 8 de 88

MICROSOFT SQL SERVER 2005

2.2 SQL SERVER MANAGEMENT STUDIO
Para entrar no SQL SERVER Management Studio : • • • • • Ir na Barra de Tarefas Clicar no Botão Iniciar Todos os Programas Microsoft SQL Server 2005 SQL Server Management Studio

Figura 1: Tela com abrir o SQL SERVER Management Studio

Banco de Dados
Autor: Nilson A. Borges 9 de 88

MICROSOFT SQL SERVER 2005
Depois de aberto aparecerá a tela a seguir:

Figura 2: Tela do SQL SERVER Management Studio

Com o SQL SERVER Management Studio, você executa a maioria das tarefas de administração de banco de dados do SQL SERVER 2005. Você deve conhecer bem essa ferramenta para gerenciar adequadamente os sistemas do SQL SERVER 2005 O SQL SERVER Management Studio fornece os seguintes recursos para administradores: • Uma ferramenta integrada de gerenciamento e desenvolvimento baseada no ambiente de desenvolvimento do Microsoft Visual Studio.

Banco de Dados
Autor: Nilson A. Borges 10 de 88

MICROSOFT SQL SERVER 2005



Gerenciamento total de banco de dados relacionais, bancos de dados do Analysis Services, Reporting Services, SQL Server Integration Services (SSIS) e banco de dados do SQL Móbile.



Object Explorer( Explorador de objetos), que é um painel gráfico do SQL SERVER Management Studio que você pode usar para a configuração de servidores, bem como para o gerenciamento e o desenvolvimento de banco de dados.



Editores de consultas para gerenciamento e desenvolvimento baseado em script. Os editores são fornecidos para consultas Transact-SQL, MDX, DMX e XMLA.



Gerenciamento de scripts baseados em projeto, no qual scripts de criação e gerenciamneto de banco de dados podem ser armazenados como um único projeto e gerenciados por meio de um painel do Solution Explorer (Explorador de Soluções) no SQL Server Management Studio.



O SQL SERVER Management Studio usa o Microsoft Visual Studio Framework e inclui a funcionalidade do Visual Studio ao criar consultas ou scripts, suporte a controle de origem para o armazenamento e a manutenção de cópias de scripts, conforme o seu desenvolvimento.

Banco de Dados
Autor: Nilson A. Borges 11 de 88

MICROSOFT SQL SERVER 2005

4. OS DATABASES DO SQL-SERVER

Uma vez instalado o SQL Server são criadas automaticamente quatro databases: a) master b) model c) tempdb d) msdb Depois, o poderemos criar e instalar nossos próprios bancos de dados livremente, os quais serão os bancos de dados de usuário. Embora ambos os tipos de bancos de dados (sistema e usuário) armazenem dados, o SQL Server utiliza os bancos de sistema para operar e gerenciar o sistema. O catálogo de sistema, por exemplo, consiste unicamente de tabelas armazenadas no banco de dados master. A figura a seguir ilustra os bancos de dados no SQL Server.
B ancos de dados do s istem a m od el S ystem table s S ystem tables Sy stem ta bles S yste m table s tem pd b msd b

m aster

S AU02

S AU05

S ystem tables

S ystem tables

B ancos de dados de u suário

Vejamos a função de cada um dos bancos de sistema.

Banco de Dados
Autor: Nilson A. Borges 12 de 88

MICROSOFT SQL SERVER 2005
MASTER Controla os bancos de dados de usuários e a operação do SQL Server, por isso os dados armazenados em suas tabelas são críticos e deve-se sempre manter backup atualizado. Ocupa inicialmente cerca de 17 Mbytes, mantendo: a) contas de login; b) processos em andamento; c) mensagens de erro do sistema; d) databases armazenados no servidor; e) espaço alocado a cada database; f) locks ativos; g) databases disponíveis e dispositivos de dump; h) procedimentos de sistema, que são primariamente utilizados para administração. O banco de dados master contém 13 tabelas de uso compartilhado com o sistema, conhecidas como Catálogo do Sistema ou Dicionário de Dados, que são: 1. syscharsets - códigos de página que estabelecem quais caracteres estão disponíveis e sua ordem de classificação; 2. sysconfigures - variáveis de ambiente configuráveis; 3. syscurconfigs - variáveis de ambiente configuráveis; 4. sysdatabases - bancos existentes no servidor; 5. sysdevices - referência física aos dispositivos e bancos do servidor; 6. syslanguages - entrada para as línguas conhecidas pelo servidor; 7. syslocks - quais são os locks ativos; 8. syslogins - contas de usuários; 9. sysmessages - mensagens de erro do sistema; Banco de Dados
Autor: Nilson A. Borges 13 de 88

MICROSOFT SQL SERVER 2005
10.sysprocesses - processos em andamento 11.sysremotelogins - contas de acesso remoto, para conexão entre dois servidores; 12.sysservers - servidores remotos; 13.sysusages - espaço em disco disponibilizado para cada banco de dados (relaciona-se com sysdatabases e sysdevices).

MODEL Fornece um protótipo (template) para um novo banco de dados. Contém as tabelas de sistema que serão inseridas em cada banco de dados de usuário. As seguintes implementações podem ser realizadas neste database: a) tipos definidos pelo usuário (user datatypes), regras (rules), padrões (defaults), stored procedures; b) usuários que terão acesso a todos os bancos adicionados ao sistema (administradores); c) privilégios padrão, notadamente aos usuários guest (guest accounts); O tamanho padrão deste banco é de 1 Mbyte, e sua estrutura básica pode ser vista na figura a seguir; as 18 tabelas mostradas serão sempre criadas em novos bancos de dados.

s s lte a s y a rn te ss g y lo s s s s rs y ue

s s o ms y c lu n ss b c y o jets s s fe ne y re re c s

s s o mn y c m e ts s s roe u s y p c d re s s o s in y c ntra ts

ss eed ydpns s s ro c y p tets s s rtic s y a le

ss dx s y in ee s s e mn y s g e ts

s s es yk y ss ps y ty e

s s u lic tio s s s u s rip n y p b a n y s bc tio s

Este conjunto de 18 tabelas é conhecido como Catálogo do Banco de Dados, e suas funções são as seguintes (note que todas possuem o prefixo sys): Banco de Dados
Autor: Nilson A. Borges 14 de 88

MICROSOFT SQL SERVER 2005
1. sysalternates - possui uma linha para cada usuário mapeado para um banco de dados de usuário; 2. syscolumns - possui uma linha para cada coluna em uma tabela ou view, e para cada parâmetro em uma stored procedure; 3. syscomments - possui uma ou mais linhas para cada view, regra (rule), padrão (default), trigger e stored procedure que contenha uma declaração de definição; 4. sysdepends - uma linha para cada procedure, view, ou tabela que seja referenciada por uma procedure, view ou trigger; 5. sysindexes - uma linha para cada clustered index, nonclustered index, e tabela sem índices, mais uma linha extra para cada tabela com informações de textos ou imagens; 6. syskeys - uma linha para cada chave estrangeira (foreign), primária (primary) ou comum (common); 7. syslogs - armazena o transaction log; 8. sysobjects - uma linha para cada tabela (table), visão (view), stored procedure, regra (rule), trigger, padrão (default), log e objeto temporário (somente tempdb); 9. sysprocedures - uma linha para cada visão (view), stored procedure, regra (rule), trigger, padrão (default); 10.sysprotects - mantém as informações de permissões de usuário; 11.syssegments - uma coluna para cada segmento; 12.systypes - uma linha para cada datatype definido pelo usuário ou fornecido pelo sistema; 13.sysusers - uma linha para cada usuário permitido no database; 14.sysreferences - uma linha para cada constraint de integridade referencial criada (PK-FK, Chave primária, chave estrangeira);

Banco de Dados
Autor: Nilson A. Borges 15 de 88

MICROSOFT SQL SERVER 2005
15.sysconstraints - informações sobre cada constraint criada; As últimas três tabelas são usadas para manter informações sobre replicação de dados. 16.sysarticles - contém a article information para cada artigo criado para replicação; 17.syspublications - contém uma linha para cada publicação criada; 18.syssubscriptions - contém uma linha para cada subscrição de um subscription server.

TEMPDB Providencia um espaço de armazenamento para tabelas e outras ações temporárias ou intermediárias, tais como resultados que envolvam a cláusula GROUP BY, ORDER BY, DISTINCT e cursores (CURSORS). Possui as seguintes características: a) criado automaticamente no DEVICE MASTER (atenção, DEVICE e DATABASE são coisas diferentes); b) seu conteúdo é apagado quando o usuário fecha a conexão, exceto para tabelas temporárias globais; c) quando o banco é parado (stoped) seu conteúdo é apagado completamente; d) seu tamanho padrão é de 2 Mbytes. e) pode ser colocado em memória RAM.

Banco de Dados
Autor: Nilson A. Borges 16 de 88

MICROSOFT SQL SERVER 2005
MSDB Providencia suporte ao serviço SQL Executive Service (o qual fornece serviços de schedulle de tarefas, replicação, gerenciamento de alertas). Possui as seguintes tabelas de sistema: a) sysalerts - armazena informações sobre todos os alertas definidos por usuários; b) sysoperators - informações sobre os operadores; c) sysnotifications - relaciona quais operadores devem receber quais alertas; d) systasks - mantém informações sobre todas as tarefas definidas por usuários; e) syshistory - informações a respeito de quando um alerta e uma tarefa foram executados, se com sucesso ou falha, identificação do operador, data e hora da execução; f) sysservermessages mensagens sobre as operações

relacionadas ao servidor.

Banco de Dados
Autor: Nilson A. Borges 17 de 88

MICROSOFT SQL SERVER 2005

5. CRIAÇÃO DE UM DATABASE
Um database é uma estrutura lógica dentro da qual são criados os sistemas de banco de dados. Ele é formado por dois tipos de arquivos. Um dos tipos armazena dados deste sistema e o outro armazena transações deste sistema (inclusões,alterações e exclusões realizadas em seus dados). Os arquivos de dados ficam organizados em grupos de arquivos e o primeiro grupo criado automaticamente no momento da criação do database chama-se PRIMARY.

a) Criando um Banco de Dados com a utilização do SQL SERVER Management Studio

Figura 5: Tela do SQL Server Management Studio para Criação de um Banco

Banco de Dados
Autor: Nilson A. Borges 18 de 88

MICROSOFT SQL SERVER 2005

Figura 6: Tela do SQL Server Management Studio para Criação de um Banco

Abaixo estão as informações das clausulas do comando de criação de um Database:

Nome: É o nome lógico do arquivo. DataFile: E o arquivo físico do Banco de Dados. Transaction Log: E o arquivo lógico do Banco de Dados. Filename: É o nome físico do arquivo. Deve ser especificado o seu diretório de criação. Initial size: É o tamanho inicial do arquivo. Filegrowth: É o valor por meio do qual o arquivo aumenta de tamanho automaticamente. Maximum File Size: É o tamanho máximo de o Arquivo Físico e/ ou Lógico pode asumir

Banco de Dados
Autor: Nilson A. Borges 19 de 88

MICROSOFT SQL SERVER 2005 Criação de um Banco de Dados através de Scripts
Exemplo: Criação de um Banco de Dados Chamado Bookselva

Create database Bookselva On primary ( name='BookSelvaBD', filename='c:\bookselva.mdf', size= 50 MB, maxsize= 500 MB, filegrowth= 5 MB ) log on ( name='bookselvalog', filename='c:\bookselva.ldf', size= 20 MB, maxsize= 200 MB, filegrowth= 2 MB )

CARACTERÍSTICA DE UM DATABASE
A Microsoft sugere como tamanho do arquivo lógico do Banco de Dados entre 35% a 40 % do tamanho do arquivo de dados, mas este valor é apenas sugestivo pois para definição do tamanho do arquivo lógico depende de outros fatores principalmente o número de transações que este Banco irá receber. Este valores valem somente se este Banco for Transacional.

Banco de Dados
Autor: Nilson A. Borges 20 de 88

MICROSOFT SQL SERVER 2005
Abaixo estão as informações clausulas do comando de criação de um Database:

Nome: É o nome lógico do arquivo. Filename: É o nome físico do arquivo. Deve ser especificado o seu diretório de criação. Size: É o tamanho limite que o arquivo pode alcançar. Filegrowth: É o valor por meio do qual o arquivo aumenta de tamanho automaticamente.

Criação de Tabelas
São objetos que vão conter os dados de um sistema. Uma tabela é um objeto bidimensional formado por linhas e colunas. As colunas, ou campos, são atributos do assunto por ela armazenada e as linhas ou registros formam um conjunto completo de todos os atributos. Cada coluna da sua tabela deve ter um “datatype” tipo de dados , que é o formato no qual os dados serão armazenados no disco. Cada tipo de dados ocupa um espaço limitado dentro do disco e pode armazenar uma deyerminada faixa de valor. O SQL Server 2005 possuem vários tipos de datatypes que podem ser utilizados em colunas das tabelas ou em variáveis de memória. Possui também regras para garantir a integridade e a consistência dos dados de uma aplicação, é necessário utilizar: • • • • Datatypes Nulabilidade Autonumeração Constraints o PK (Primary Key) o FK (Foreign Key)

Banco de Dados
Autor: Nilson A. Borges 21 de 88

MICROSOFT SQL SERVER 2005
A seguir listaremos as principais regras do SQL Server 2005.

Confira abaixo alguns dos tipos de dados:
• • • •

Char(n): quando o campo for do tipo alfanumérico e com tamanho fixo, o n quer dizer limitação, o valor máximo de caracteres; Varchar(n) : quando o campo for do tipo alfanumérico e com tamanho não é fixo, o n quer dizer limitação, o valor máximo de caracteres; Int: quando o campo for numero com valor inteiro. Decimal (p,s): quando o campo for números com valores decimais, o valor de p é o numero de algarismos e o s é valor dos algarismos decimais (algarismos após a virgula).



Money, smallmoney :quando o campo for valores monetários.

Money (8 bits) é quando a quantidade de dinheiro é muito (ex.: loteria), e smallmoney (4 bits) é quando a quantidade de dinheiro é pequena. Datetime e SmallDatetime:quando o campo for do tipo data ou hora. • Bit :determina se o valor é verdadeiro, falso ou nulo.

Nulabilidade
Nulabilidade: Significa se o campo declarado pode ser ou não nulo. Para fazer tal declaração é necessário definir o campo com a clausula: o Not null (não permite valor nulo,preenchimento obrigatório do campo) o Null (permite valor nulo, preenchimento não obrigatório do campo)

Banco de Dados
Autor: Nilson A. Borges 22 de 88

MICROSOFT SQL SERVER 2005 Constraints: Integridade
Primary Key(Chave Primária): Campo principal da tabela onde não permite dados repetidos no campo. Tornando assim, identificar unicamente cada registro da tabela.

Exemplo: Constraint PK_Cliente Primary Key (Cód_Cli)

Foreign Key(Chave Estrangeira): É um campo cujos os dados aparecem necessariamente na chave primária de uma outra tabela, mecanismo principal para efetuarmos relacionamento entre tabelas.

Exemplo: Constraint FK_NotaFiscal Foreign Key(Cód_Cli) References Cliente(Cod_Cli)

AutoNumeração
Identidade para um banco de dados é a forma de identificar cada linha de uma tabela como única. Para manter a integridade e a consistência dos dados, é necessário ter uma forma de identificá-los como únicos dentro de uma tabela. E para tanto, utilizam-se a chave primária. As chaves primárias normalmente são colocadas em uma coluna que numera os registros dentro de uma tabela. A coluna Cod_Cli da tabela Cliente deve receber valores únicos. Para solucionar a questão sobre valores únicos nos registros o SQL SERVER 2005 disponibiliza uma propriedade do campo como IDENTITY, onde fará a autonumeração na coluna onde for especificada.

Banco de Dados
Autor: Nilson A. Borges 23 de 88

MICROSOFT SQL SERVER 2005
Para criar uma tabela com a propriedade identity, observe o exemplo apresentado em seguida:

Use bookselva Create table Email ( Cod_email Descricao_email provedor_email int identity not null, not null, not null,

varchar(40) varchar(40)

Constraint PK_email Primary Key(Cod_email)

Criação de Tabelas no Banco de Dados criado anteriormente com a utilização de scripts
Use bookselva Create table Cliente ( Cod_Cli Nome_Cli End_Cli Bai_Cli Cid_Cli Uf_Cli Tel_Cli int identity not null, not null, not null, not null, not null, not null, null,

varchar(40) varchar(30) varchar(20) varchar(20) char(3) varchar(15)

Constraint PK_Cliente Primary Key(Cod_Cli) )

Banco de Dados
Autor: Nilson A. Borges 24 de 88

MICROSOFT SQL SERVER 2005
Create Table NotaFiscal ( Num_Nota Cod_Cli Serie_Nota Emissao_Nota Vtot_Nota int identity int varchar(10) smalldatetime SmallMoney not null, not null, not null, null, not null,

Constraint PK_NotaFiscal Primary Key(Num_Nota),

Constraint FK_Cliente Foreign Key(Cod_Cli) References cliente(Cod_Cli)
)

Create Table Produto ( Cod_Prod Nome_Prod Qtd_Estoque Val_Prod int identity not null, not null, not null, not null,

varchar(50) int decimal(8,2)

Constraint PK_Prod Primary Key(Cod_Prod)
)

Banco de Dados
Autor: Nilson A. Borges 25 de 88

MICROSOFT SQL SERVER 2005
Create Table ItensNota ( Num_Nota Cod_Prod Qtd_Vend Val_Vend int int int decimal(8,2) not null, not null, not null, not null,

Constraint PK_ItensNota Primary Key(Num_Nota,Cod_Prod),

Constraint FK_Itens1Nota Foreign Key(Num_Nota) References NotaFiscal(Num_Nota),

Constraint FK_Itens2Nota Foreign Key(Cod_Prod) References Produto(Cod_Prod)

)

Criando um Diagrama
O SQL SERVER Management Studio permite que você crie um diagrama das tabelas para verificar os relacionamentos das tabelas se houver relacionamento, Mas o diagrama só poderá ser feito depois de ter criado as tabelas e seus relacionamentos. Para criar um Diagrama com o SQL SERVER Management Studio expanda seu database no exemplo o BookSelva, clique com o botão direito sobre a pasta ” Database Diagrams “e escolha a opção “New Database Diagram” como mostra a figura abaixo:

Banco de Dados
Autor: Nilson A. Borges 26 de 88

MICROSOFT SQL SERVER 2005

Figura 7: Tela do SQL Server Management Studio criando um Diagrama

Em seguida aparecerá a primeira tela do onde você deverá escolhar as tabelas que irão compor seu diagrama. Selecionar as tabelas Cliente, Itens, NotaFiscal e Produto.

Banco de Dados
Autor: Nilson A. Borges 27 de 88

MICROSOFT SQL SERVER 2005

Figura 8: Tela do SQL Server Management Studio criando um Diagrama

Depois clicar no botão ADD logo em seguida irá surgir a tela a seguir com o relacionamento das tabelas. Pronto o diagrama das tabelas.

Figura 9: Tela do SQL Server Management Studio criando um Diagrama

Banco de Dados
Autor: Nilson A. Borges 28 de 88

MICROSOFT SQL SERVER 2005

5. INSERT (Insere registro)
Definição: O comando INSERT insere um novo registro em uma tabela Sintaxe: INSERT INTO <tabela> [<campos>] VALUES <valores> Exemplos: Adotando-se que a ordem dos campos da tabela cliente seja (Cod_Cli, Nome_Cli, End_Cli, Bai_Cli, Cid_Cli, Uf_Cli, Tel_Cli) temos:

/*insere os valores (1,‘Nilson Borges’, Av.Paulista,929’, ’Cerqueira César’, ’São Paulo’, ’SP’, ’3285-0202’) na tabela CLIENTES */

INSERT

INTO

CLIENTE

VALUES

(’Nilson

Borges’,

‘Av.Paulista,929’, ’Cerqueira César’, ’São Paulo’, ’SP’, ’3285-0202’) ou INSERT INTO CLIENTE ( Nome_Cli, End_Cli, Bai_Cli, Cid_Cli, Uf_Cli,Tel_Cli)VALUES(1,’Nilson Borges’, ‘Av.Paulista,929’, ’Cerqueira César’, ’São Paulo’, ’SP’, ’3285-0202’)

OBS: O valor cod_cli não é necessário inserir pois foi definido como identity que é autonumeração e seu

preenchimento é automático

/*insere

os

valores

(1,1,‘WEP2525’,’2004/08/12’,250.89)

na

tabela

NOTAFISCAL*/ INSERT INTO NOTAFISCAL VALUES (1, 1, ‘WEP2525’, ’2004/08/12’,250.89) Ou INSERT INTO NOTAFISCAL Vtot_Nota) (Num_Nota, VALUES Cod_Cli, (1, 1, Serie_Nota, ‘WEP2525’,

Emissao_Nota,

’2004/08/12’,250.89) Banco de Dados
Autor: Nilson A. Borges 29 de 88

MICROSOFT SQL SERVER 2005

6. UPDATE (Altera valor do registro)
Definição: O comando UPDATE altera campos de um ou vários registros de uma tabela.

Sintaxe: UPDATE <tabela> SET <campo> = <expressão> [WHERE <condição>]; Exemplos: /* atualiza o campo NOME_CLI para ‘Juliana Costa’ do registro da tabela CLIENTE para o Cód_Cli igual a 1 */ UPDATE CLIENTE SET Nome_Cli = 'Juliana Costa' WHERE Cod_Cli = 1

/* atualiza o campo valor total para 125.75 do registros da tabela NOTAFISCAL onde o campo Emissão_nota for maior que 10/08/2004 */ UPDATE NOTAFISCAL SET Vtot_Nota = 125.75 WHERE Emissao_nota > ‘2004/08/10’

/* atualiza o campo valor total da tabela NOTAFISCAL com um acréscimo de 12% em todos os campos onde a emissão for menor do que 20/08/2004

UPDATE NOTAFISCAL SET Vtot_Nota = Vtot_Nota*1.12 WHERE Emissao_nota < ‘2004/08/20’

Banco de Dados
Autor: Nilson A. Borges 30 de 88

MICROSOFT SQL SERVER 2005

Operadores de Comparação

Operador = <> > >= < <=

Descrição Igual a Diferente Maior que Maior ou igual a Menor que Menor ou igual a

Exercício
1) Atualize o campo Cid_Cli da tabela Cliente para ‘Santo André’ para os registros dos clientes do campo UF_Cli igual a SP. 2) Atualize o campo Cod_Cli da tabela NotaFiscal para 3 para os registros das Notas Fiscais com valor total abaixo de 130.00. 3) Atualiza o campo VTot_Nota com um desconto de 23% para o registros das Notas Fiscais com valor total diferente de 581.20

Banco de Dados
Autor: Nilson A. Borges 31 de 88

MICROSOFT SQL SERVER 2005

7. DELETE (Exclusão de registros)
Definição: O comando DELETE exclui um ou mais registros de uma tabela

Sintaxe: DELETE [FROM] <tabela> [WHERE <condição>];

Exemplo:

/* exclui todos os registros da tabela NotaFiscal onde o campo Cod_Cli é igual a 1 */ DELETE FROM NOTAFISCAL WHERE Cod_Cli = 1

/* exclui todos os registros da tabela CLIENTE onde o campo Nome_Cli é igual a ‘João Pedro’*/ DELETE FROM CLIENTE WHERE Nome_Cli = ‘João Pedro’

Exercícios
1) Excluir todas as NotasFiscais onde a Data de Emissão é superior a 15/08/2004

2) Excluir todas as NotasFiscais onde o valor total seja menor ou igual a 4520.21

3) Excluir todos os clientes onde moram no Estado de Minas Gerais.

4) Excluir todos os clientes onde moram na Cidade de São Roque.

5) Excluir todas as NotasFiscais que menos a do Cliente de Código igual a 2.

Banco de Dados
Autor: Nilson A. Borges 32 de 88

MICROSOFT SQL SERVER 2005

8. APRESENTANDO O SISTEMA INFONEW
O objetivo deste sistema fictício é criar um ambiente OLTP para que vocês coloquem em prática os tópicos que serão vistos nos próximos capítulos desta apostila. O Sistema INFONEW deve gerenciar as operações comerciais de uma suposta empresa.

8.1 Os objetivos gerais do INFONEW são:
Parte 1: Manter dados a respeito dos Clientes: Parte 2: Realizar análise de crédito de cada Cliente Parte 3: Manter dados a respeito dos produtos a serem vendidos Parte 4: Manter e gerenciar os pedidos de compra feitos por esses clientes. Parte 5: Manter dados a respeito dos Funcionários

Parte 1 – Manter Dados a Respeito dos Clientes da Empresa Manter dados a respeito dos clientes envolve armazenar todas as informações a respeito de cada cliente para que ele possa ser encontrado facilmente num momento de necessidade. Nessa empresa, um cliente pode possuir vários tipos de endereço, por exemplo, endereço residencial, de faturamento, de entrega, de cobrança, etc..., e o sistema tem que ser capaz de armazenar qualquer quantidade e qualquer tipo de endereço para cada cliente individualmente. Cada endereço deve ser o mais completo possível, contendo além do nome da rua, do bairro, número do prédio, o nome da cidade e do estado dessa cidade. É necessário saber também dados a respeito do cônjuge de cada cliente (se ele tiver um cônjuge), pois no cálculo do crédito para cada clientes, a renda do cônjuge pode ser considerada. Banco de Dados
Autor: Nilson A. Borges 33 de 88

MICROSOFT SQL SERVER 2005
É necessário também que o sistema consiga armazenar qualquer quantidade de telefone que o cliente possa informar e qualquer quantidade de e-mails. Assim que um cliente é cadastrado no sistema, deve ser atribuído a ele um tipo de cliente, ou seja, uma classificação de acordo com a sua renda mensal.

Parte 2 – Análise do Credito do Cliente Inicialmente, quando um cliente é cadastrado no sistema, é atribuído a ele um tipo de cliente, ou seja, uma classificação de acordo com a sua renda. O cálculo do limite de crédito deve ser uma aplicação que poder ser executada periodicamente, para todos os clientes de uma só vez ou para um cliente especifico. Esse cálculo deve levar em consideração o tipo do cliente, a renda do cônjuge, a soma total de pedidos realizados no ano corrente e o atraso médio nos pagamentos das parcelas. Esse valor que limita o crédito do cliente deve ser levado em consideração sempre antes de realizar uma venda para cada cliente. Parte 3 – Manter Dados a Respeito dos Produtos a Serrem Vendidos Cada produto disponível para venda deve ser classificado por um tipo para que seja possível realizar totalizações em estoque, produzindo dados gerenciais. Por exemplo, o sistema deve ser capaz de fornecer informações como: Quantidade de cada produto vendida num determinado período. Quantidade de um determinado tipo de produto vendida em um determinado período. Tipo de produto vendido em cada região de cada cidade. Tipo de produto vendido em cada região de cada estado. Controle de quantidade em estoque de cada produto. Controle de quantidade em estoque de cada tipo de produto. Tipos de produto que são mais vendidos. Tipos de produto manos vendidos.

Banco de Dados
Autor: Nilson A. Borges 34 de 88

MICROSOFT SQL SERVER 2005
Parte 4 – Manter e Gerenciar os Pedidos de Compra Feitos pelos Clientes Cada pedido de compra pode ser pago á vista ou ser parcelado. O sistema deve ser capaz de fornecer informações a respeito de cada pedido de um determinado usuário. Essas informações são: Data e valor do primeiro pedido do cliente. Parcelas em atraso de um pedido. Valor original de cada parcela. Valor de cada parcela com juros e multa. O sistema deve ser capaz de informar os produtos que cada cliente já comprou, e os produtos que cada um nunca comprou. A cada venda realizada o sistema deve ser capaz de calcular o valor total de cada pedido e dar baixa em estoque a cada produto vendido. O sistema deve aceitar devolução de produtos comprados pelos clientes se o referido pedido estiver em aberto. E essa devolução deve recolocar o produto em estoque e retirar o valor do pedido a ser pago pelo cliente.

Parte 5 – Manter Dados a Respeito dos Funcionários O sistema deve ser capaz de armazenar dados a respeito dos funcionários e dos dependentes que cada funcionário possui. Cada funcionário deve receber, alem de um salário fixo, bônus mensais de acordo com os produtos que ele vender. O desempenho de cada funcionário será medido por pontos que ele recebe mensalmente. De acordo com essa pontuação, seu bônus pode ser acrescido de determinados valores. Todas as vezes que o salário fixo de cada funcionário for alterado, o sistema deve armazenar no histórico o salário anterior, o atual e a data da alteração.

Banco de Dados
Autor: Nilson A. Borges 35 de 88

MICROSOFT SQL SERVER 2005

8.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW

Banco de Dados
Autor: Nilson A. Borges 36 de 88

MICROSOFT SQL SERVER 2005

9. SELECT (Consulta)
Descrição: Este comando faz a seleção dos dados de uma ou mais tabelas.

Sintaxe: SELECT <campo> FROM <tabela>

Exemplos:

SELECT COD_CLI, NOME_CLI,SEXO_CLI FROM CLIENTE SELECT COD_CLI, NUM_LANC, DATA_CREDCLI, CRED_CLI FROM CREDITO SELECT PRODUTO SELECT COD_FUNC, NOME_FUNC, SAL_FUNC FROM COD_PROD, NOME_PROD, VAL_UNITPROD FROM

FUNCIONARIO

Para listar todos os campos da tabela, utilizamos o operador "*" (asterisco)

SELECT * FROM CLIENTE SELECT * FROM CREDITO SELECT * FROM PRODUTO SELECT * FROM FUNCIONARIO

Banco de Dados
Autor: Nilson A. Borges 37 de 88

MICROSOFT SQL SERVER 2005

9.1 ORDER BY (Ordem de retorno)
Definição: A cláusula ORDER BY determina a ordem de apresentação do resultado de uma pesquisa de forma ascendente ou descendente.

Sintaxe: SELECT <campo> FROM <tabela> [WHERE <condição>] ORDER BY <campo_ordenacao> [ASC/DESC]

Exemplos: /* seleciona todos os registros da tabela CLIENTES ordenando o retorno pelo campo CODIGO em ordem ascendente */ SELECT * FROM CLIENTE ORDER BY COD_CLI ASC

/* seleciona todos os registros da tabela CLIENTES ordenando o retorno primeiro pelo campo CODIGO em ordem descendente e depois pelo campo NOME em ordem ascendente */ SELECT * FROM CLIENTES ORDER BY COD_CLI DESC, NOME_CLI ASC

Banco de Dados
Autor: Nilson A. Borges 38 de 88

MICROSOFT SQL SERVER 2005

9.2 ALIAS (Apelido)
Definição: Literal que identifica um campo, uma função ou uma tabela

Sintaxe:

SELECT (<campo> ou <função>) <alias do retorno> FROM <tabela> <alias da tabela>

Exemplos: /* seleciona o valor do campo NOME da tabela CLIENTES */ SELECT NOME_CLI AS "NOME DO CLIENTE" FROM CLIENTE Observe que a coluna Nome_Cli passou a chamar Nome do Cliente

/* listar o código do cliente, nome do cliente ,renda do CLIENTE e renda do CLIENTE com acréscimo de 37% */

SELECT COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37 FROM CLIENTE Observe que está mostrando uma coluna com nome (No column name) para não aparecer está coluna é necessário criar um alias para a coluna conforme código abaixo.

SELECT

COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37

AS "RENDA COM AUMENTO" FROM CLIENTE

Banco de Dados
Autor: Nilson A. Borges 39 de 88

MICROSOFT SQL SERVER 2005

9.3 WHERE (Restrições)
Descrição: Com esta cláusula é possível fazermos restrição dos registros a serem manipulados, como veremos posteriormente ela também poderá ser usados para outros comandos do SQL.

Sintaxe: SELECT <campo> FROM <tabela> WHERE <condição>

Exemplo: /*serão listados todos os registro da tabela CLIENTES onde o campo Cod_Cli for igual a 1 */ SELECT * FROM CLIENTE WHERE COD_CLI = 1

/*serão listados todos os registros da tabela PEDIDO onde o campo Data_Ped for superior a 01/02/2001 E cod_sta= 1*/ SELECT * FROM PEDIDO WHERE DATA_PED > ‘2001/02/01’ AND COD_STA=1

/*serão listados todos os registros da tabela CLIENTE onde o campo Nome_Cli for igual à Daniel Souza OU Clientes do sexo Feminino */ SELECT * FROM CLIENTE WHERE NOME_CLI = 'DANIEL SOUZA' OR SEXO_CLI=’F’

Obs: Não esqueça que na clausula where utiliza-se os operadores de comparação: maior, menor, igual, diferente, maior ou igual e menor ou igual.

Banco de Dados
Autor: Nilson A. Borges 40 de 88

MICROSOFT SQL SERVER 2005

9.4 BETWEEN (Condição com uma faixa de valores)
Definição: O operador BETWEEN determina a faixa de valores aceito de uma pesquisa. Este comando substitui os operadores ‘>=’ e ‘<=’.

Sintaxe: SELECT <campo> FROM <tabela> WHERE <campo> BETWEEN <valor_inicial> AND <valor_final>

Exemplos: /* seleciona todos os registros da tabela CLIENTE onde o campo Cod_Cli estiver entre 1 e 5 */

SELECT * FROM CLIENTE WHERE COD_CLI BETWEEN 1 AND 5

/* seleciona todos os registros da tabela PEDIDO onde o campo Data_Ped estiver entre ‘10/10/2003’ a ‘02/10/2004’ */

SELECT * FROM PEDIDO WHERE DATA_PED BETWEEN '2003/10/10' AND

‘2004/10/02'

/*seleciona todos os registros da tabela PRODUTO onde o campo Val_UnitProd estiver entre 500 e 1000 */ SELECT * FROM PRODUTO WHERE VAL_UNITPROD BETWEEN 500 AND 1000

Banco de Dados
Autor: Nilson A. Borges 41 de 88

MICROSOFT SQL SERVER 2005

9.5 LIKE (Comparação com uma parte de uma literal)
Definição: O operador LIKE faz a comparação somente com uma parte de uma literal, desconsidera tudo que possa vir antes ou depois do valor passado. O caracter ‘%’ significa qual à parte a ser desconsiderada

Sintaxe: SELECT <campo> FROM <tabela> WHERE <campo> LIKE <[%]parte_literal[%]>

Exemplos: /* seleciona todos os registros da tabela CLIENTES onde o campo Nome_Cli terminar com a literal SOUZA */ SELECT * FROM CLIENTE WHERE NOME_CLI LIKE ‘%SOUZA’

/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli começar com a letra A */ SELECT * FROM CLIENTE WHERE NOME_CLI LIKE ‘A%’

/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli conteúdo */ SELECT * FROM CLIENTE WHERE NOME_CLI NOT LIKE ‘%OLIVEIRA%’ não possuir o sobrenome OLIVEIRA dentro do seu

/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli possui a primeira letra entre A a D */ SELECT * FROM CLIENTE WHERE NOME_CLI LIKE ‘[A-D}%’

Banco de Dados
Autor: Nilson A. Borges 42 de 88

MICROSOFT SQL SERVER 2005

9.6 DISTINCT (Valores únicos)
Definição: O operador DISTINCT elimina todas as replicações,

significando que somente dados distintos serão apresentados como resultado de uma pesquisa.

Sintaxe: SELECT DISTINCT <campo> FROM <tabela> [WHERE <condição>]

Exemplos: /* seleciona todos os valores do campo Código do Cliente, valor do pedido da tabela PEDIDO sem repetição dos códigos do cliente */ SELECT DISTINCT COD_CLI,VAL_PED FROM PEDIDO

/* seleciona todos os valores do campo data do pedido , valor do pedido, da tabela Pedido sem repetição da data do pedido*/ SELECT DISTINCT DATA_PED,VAL_PED FROM PEDIDO

Banco de Dados
Autor: Nilson A. Borges 43 de 88

MICROSOFT SQL SERVER 2005

9.7 IN (Condição com valores fixos)
Definição: O operador IN determina os valores fixos aceitos de uma pesquisa.

Sintaxe:

SELECT <campo> FROM <tabela> WHERE <campo> IN (<lista_de_valores>) Exemplos:

/* seleciona todos os registros da tabela CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */ SELECT * FROM CLIENTE WHERE COD_CLI IN (1,2,3,4)

/* seleciona todos os registros da tabela PEDIDO onde o campo NUMERO for igual a 45 ou 50 */ SELECT * FROM PEDIDO WHERE NUM_PED IN (45,50)

/* seleciona todos os registros da tabela TIPOCLI onde o campo CODIGO for igual a 1 ou 3 ou 5 ou 6*/ SELECT * FROM TIPOCLI WHERE COD_TIPOCLI IN (1, 3, 5, 6)

/* seleciona todos os registros da tabela TIPOCLI onde o campo NOME for igual a OURO SELECT * FROM TIPOCLI WHERE NOME_TIPOCLI IN (‘OURO’)

Banco de Dados
Autor: Nilson A. Borges 44 de 88

MICROSOFT SQL SERVER 2005

10. FUNÇÕES DE AGRUPAMENTO
COUNT (CONTAR) SUM (SOMAR) AVG (MÉDIA) MAX (MÁXIMO) MIN (MÍNIMO)

10.1 COUNT (Contador de registros)
Definição: A função COUNT retorna a quantidade de registros correspondentes a uma pesquisa.

Sintaxe: SELECT COUNT(*) FROM <tabela> [WHERE <condição>]

Exemplos:

/* seleciona a quantidade de registros da tabela Clientes */ SELECT COUNT(*) AS “TOTAL CLIENTES” FROM CLIENTE

/* seleciona a quantidade de registros da tabela pedidos onde o campo data_ped estiver entre 02/02/2000 a 03/08/2002 */ SELECT COUNT(*)AS ”QUANTIDADE PEDIDOS” FROM PEDIDO WHERE ‘2002/08/03’ DATA_PED BETWEEN ‘2000/02/02’ AND

/* seleciona a quantidade de telefones que cada cliente possui */ SELECT COD_CLI,COUNT(COD_CLI) AS “TOTAL TELEFONE” FROM FONE GROUP BY COD_CLI

Banco de Dados
Autor: Nilson A. Borges 45 de 88

MICROSOFT SQL SERVER 2005

10.1.1 GROUP BY (Agrupamento de dados)

Definição: A cláusula GROUP BY agrupa todas as linhas de retorno de uma pesquisa que possuírem o valor de seus campos iguais.

Sintaxe : SELECT (<campo_agrupamento> e/ou <funcao_agrupamento>) FROM <tabela> [WHERE <condição>] GROUP BY <campo_agrupamento>

Exemplo: /* seleciona a quantidade de telefones que cada cliente possui agrupado por cliente */ SELECT COD_CLI,COUNT(COD_CLI) AS “TOTAL TELEFONE” FROM FONE GROUP BY COD_CLI

/* seleciona a quantidade de emails que cada cliente possui agrupado por cliente */ SELECT COD_CLI,COUNT(COD_CLI) AS “TOTAL EMAIL”

FROM EMAIL GROUP BY COD_CLI

/* seleciona a quantidade de parcelas que cada pedido possui agrupado pedido */ SELECT NUM_PED, COUNT(NUM_PED) AS “QUANT.PARCELAS” FROM PARCELA GROUP BY NUM_PED

Banco de Dados
Autor: Nilson A. Borges 46 de 88

MICROSOFT SQL SERVER 2005

10.2 SUM (Somatória de valores)
Definição: A função SUM faz a somatória dos valores de um campo.

Sintaxe: SELECT SUM(<campo>) FROM <tabela> [WHERE <condição>] Exemplos:

/* seleciona a somatória dos valores do campo Renda_Cli da tabela Clientes */ SELECT COD_CLI, SUM(RENDA_CLI) AS ”RENDA CLIENTE” FROM CLIENTE

/* seleciona a somatória dos valores do campo Val_UnitProd da tabela PRODUTO*/ SELECT COD_PROD, SUM(VAL_UNITPROD)AS ”VALOR TOTAL PRODUTOS” FROM PRODUTO

GROUP BY COD_PROD

Banco de Dados
Autor: Nilson A. Borges 47 de 88

MICROSOFT SQL SERVER 2005

10.3 AVG (Média de valores)

Definição: A função AVG faz a média dos valores de um campo.

Sintaxe: SELECT AVG(<campo>) FROM <tabela> [WHERE <condição>]

Exemplos:

/* seleciona a média dos valores do campo Renda_Cli da tabela Clientes */

SELECT COD_CLI, AVG(RENDA_CLI) AS ”RENDA CLIENTE” FROM CLIENTE GROUP BY COD_CLI

/* seleciona a média dos valores do campo Val_UnitProd da tabela PRODUTO*/ SELECT COD_PROD, AVG(VAL_UNITPROD)AS ”VALOR TOTAL PRODUTOS” FROM PRODUTO

GROUP BY COD_PROD

Banco de Dados
Autor: Nilson A. Borges 48 de 88

MICROSOFT SQL SERVER 2005

10.4 MIN, MAX (Menor e maior valor)
Definição: As funções MIN e MAX retornam respectivamente o menor e o maior valor encontrado para um campo.

Sintaxe: SELECT MIN(<campo>) FROM <tabela> [WHERE <condição>] SELECT MAX(<campo>) FROM <tabela> [WHERE <condição>]

Exemplos:

/* seleciona o menor do valor do campo Renda_Cli da tabela Clientes */

SELECT CLIENTE

MIN(RENDA_CLI)

AS

”MENOR

RENDA”

FROM

/* seleciona o maior do valor do campo Val_UnitProd da tabela PRODUTO*/ SELECT MAX(VAL_UNITPROD) AS ”MAIOR PRODUTO” PRODUTO FROM

Banco de Dados
Autor: Nilson A. Borges 49 de 88

MICROSOFT SQL SERVER 2005

11.HAVING (condição do agrupamento)
Definição: A cláusula HAVING faz com que o resultado da pesquisa seja feito sob determinada condição. A condição HAVING está para a cláusula GROUP BY da mesma forma que a cláusula WHERE está para o comando SELECT Sintaxe: SELECT (<campo> ou <função>) FROM <tabela> [WHERE <condição1>] GROUP BY <campo> HAVING <condição2> Exemplos: /* seleciona o campo Código Funcionário e a quantidade de registros da tabela Dependentes agrupados pelo campo Cod_Func onde o valor do campo Quantidade de Dependentes deve possuir mais de 1 ocorrência */ SELECT COD_FUNC, COUNT(COD_FUNC) AS “TOTAL” FROM DEPENDENTE GROUP BY COD_FUNC HAVING COUNT(COD_FUNC) > 1

/* seleciona o campo RENDA, o menor e o maior valor do campo RENDA da tabela CLIENTE agrupados pelo campo CODIGO onde o valor do campo CODIGO deve possuir média superior a 450 */ SELECT COD_CLI, MIN(RENDA_CLI) AS “MINIMO”, MAX(RENDA_CLI) AS “MÁXIMO” COD_CLI HAVING AVG(RENDA_CLI) > 450 FROM CLIENTE GROUP BY

Banco de Dados
Autor: Nilson A. Borges 50 de 88

MICROSOFT SQL SERVER 2005

12. JOIN (Relacionamento de tabelas)
12.1 Introdução a Joins:
Um join é uma operação que permite você consultar duas ou mais tabelas para produzir um result set que incorpora linhas e colunas de cada tabela. Seu join ocorre em colunas das tabelas que são comuns em ambas às tabelas. Quando na execução de um join de tabelas, o SQL Server compara os valores das colunas especificas, linha a linha e ele usa o resultado da comparação para combinar os valores qualificando para novas linhas. São quatro tipos de joins: inner joins, outer joins, cross joins e self joins.

12.2 TIPOS DE JOINS
Inner Join Outer Join Cross Join Self Join

12.2.1 Usando Inner Joins:
Inner joins combinam tabelas pela comparação em colunas que são comuns a ambas as tabelas. SQL Server retorna somente linhas que atendem as condições do join. Quando usar joins considere os seguintes fatos e diretrizes: Inner Joins são DEFAULT SQL Server. Você pode abreviar a clausula INNER JOIN para JOIN. Especifique as colunas que você gostaria de mostrar no seu result set pela inclusão do qualified name da coluna na listas do select. Inclua a clausula Where para restringir as linhas que são retornadas no result set.

Banco de Dados
Autor: Nilson A. Borges 51 de 88

MICROSOFT SQL SERVER 2005
Não use um valor nulo como uma condição join porque valores nulos não são avaliados igualmente com um outro.

12.2.2 Usando Outer Joins:
Você usa um outer join para ver linhas que normalmente não atendem a uma condição de join. Operador do Outer join é um sinal de (*) antes ou depois da condição de igualdade, ou usando a palavra chave LEFT OUTER JOIN, RIGHT OUTER JOIN. Left ou Right outer joins, combinam linhas a partir de duas tabelas que atenda a uma condição de join, mais qualquer das linhas que não atendam ou da tabela do lado esquerdo ou da tabela do lado direito como especificado na clausula JOIN. Linhas que não atendem a condição join mostram null no result set. Você também pode usar full outer joins para mostrar toas às linhas nas tabelas join, indiferentemente das tabelas terem atendido quaisquer dos valores. Quando utilizar left ou right outer joins, considere os seguintes fatos ou diretrizes: • • SQL Server retorna somente linhas únicas quando você usa left ou right outer joins. Use um left outer join para mostrar todas as linhas a partir da primeira tabela nomeada. Se você inverter a ordem no qual as tabelas estão listadas na clausula FROM, a declaração produz o mesmo resultado como um right outer join. • • • Não use um valor nulo como condição de join porque valores nulos são avaliados igualmente com um outro. Voce pode abreviar o LEFT OUTER JOIN ou RIGHT OUTER JOIN como LEFT JOIN ou RIGHT JOIN. Você pode usar outer joins entre duas tabelas somente.

Banco de Dados
Autor: Nilson A. Borges 52 de 88

MICROSOFT SQL SERVER 2005 12.2.3. Usando Cross Joins:
Cross join mostra combinação de todas as linhas das tabelas unidas. Nenhuma coluna comum será necessária para fazer um cross join. Quando você usa cross joins, SQL Server produz um produto cartesiano no qual o numero de linhas no resultado seja igual ao numero de segunda tabela. Por exemplo, se são 8 linhas na primeira tabela e 9 linhas na outra tabela SQL Server retorna um total de 72 linhas.

12.3 Exemplos de JOIN (Relacionamento de tabelas)
/* seleciona o campo CODIGO, NOME da tabela CLIENTE e o campo EMAIL DO CLIENTE da tabela EMAIL */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE INNER JOIN EMAIL ON CLIENTE.COD_CLI =EMAIL.COD_CLI OU SELECT C.COD_CLI,C.NOME_CLI, E.EMAIL_CLI FROM CLIENTE C INNER JOIN EMAIL E ON C.COD_CLI =E.COD_CLI (Exemplos com a utilização de alias)

/*Utilizando o exemplo anterior agora queremos listar todos os clientes possui ou não email, para fazer tal consulta é necessário a utilização do comando OUTER JOIN */ SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE LEFT OUTER JOIN EMAIL ON CLIENTE.COD_CLI = EMAIL.COD_CLI

Banco de Dados
Autor: Nilson A. Borges 53 de 88

MICROSOFT SQL SERVER 2005
/*Utilizando o exemplo anterior agora queremos fazer todas as combinações possíveis de cliente com email, para fazer tal consulta é necessário a utilização do comando CROSS JOIN */ SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE CROSS JOIN EMAIL

12.3 Combinação de mais de 2 tabelas
/* seleciona o campo CODIGO, NOME da tabela CLIENTE NOME_RUA, NOME_BAIRRO da tabela ENDEREÇO e

NOME_CID da tabela CIDADE */

SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, ENDERECO.NOME_RUA,ENDERECO.NOME_BAIRRO, CIDADE.NOME_CID FROM CLIENTE INNER JOIN ENDERECO ON CLIENTE.COD_CLI =ENDERECO.COD_CLI INNER JOIN CIDADE ON CIDADE.COD_CID =ENDERECO.COD_CID OU SELECT CL.COD_CLI,CL.NOME_CLI,E.NOME_RUA, E.NOME_BAIRRO,CI.NOME_CID FROM CLIENTE CL JOIN ENDERECO E ON CL.COD_CLI =E.COD_CLI JOIN CIDADE CI ON CI.COD_CID =E.COD_CID

Banco de Dados
Autor: Nilson A. Borges 54 de 88

MICROSOFT SQL SERVER 2005

13. IN (Condição com valores fixos)
Definição: O operador IN determina os valores fixos aceitos de uma pesquisa. Sintaxe:

SELECT <campo> FROM <tabela> WHERE <campo> IN (<lista_de_valores>) Exemplos:

/* seleciona todos os registros da tabela CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */ SELECT * FROM CLIENTE WHERE COD_CLI IN (1,2,3,4)

/* seleciona todos os registros da tabela PEDIDO onde o campo NUMERO for igual a 45 ou 50 */ SELECT * FROM PEDIDO WHERE NUM_PED IN (45,50)

/* seleciona todos os registros da tabela TIPOCLI onde o campo CODIGO for igual a 1 ou 3 ou 5 ou 6*/ SELECT * FROM TIPOCLI WHERE COD_TIPOCLI IN (1, 3, 5, 6)

/* seleciona todos os registros da tabela TIPOCLI onde o campo NOME for igual a OURO SELECT * FROM TIPOCLI WHERE NOME_TIPOCLI IN (‘OURO’)

Banco de Dados
Autor: Nilson A. Borges 55 de 88

MICROSOFT SQL SERVER 2005

4. SUBQUERIES (Pesquisa dentro de um comando)
Definição: O conceito de SUBQUERIES possibilita criar um consulta (comando SELECT) dentro de um outro comando(SELECT, INSERT, UPDATE, DELETE).

Sintaxe: Não existe uma sintaxe fixa, mas existem algumas restrições: - deve estar sempre entre parênteses; - não pode ser usada na cláusula ORDER BY; - a subquery não pode conter ORDER BY, COMPUTE ou SELECT INTO - a subquery não pode, em hipótese alguma, retornar mais de uma coluna no caso de comparação por valores ou listas; - a subquery deve usar a função EXISTS se fizer um SELECT *; - não pode usar na lista de colunas do SELECT uma coluna do tipo IMAGE ou TEXT.

Exemplos:

/* seleciona todos os registros da tabela CLIENTE onde o campo RENDA for maior ou igual ao maior valor da média do campo RENDA */ SELECT * FROM CLIENTE WHERE RENDA_CLI FROM CLIENTE ) > = (SELECT AVG(RENDA_CLI)

/* seleciona todos os registros da tabela PRODUTOS o campo VALOR UNITARIO é maior do o menor valor do campo VALOR DO PEDIDO */ SELECT * FROM PRODUTO WHERE VAL_UNITPROD > (SELECT MIN(VAL_PED) FROM PEDIDO) Banco de Dados
Autor: Nilson A. Borges 56 de 88

MICROSOFT SQL SERVER 2005
/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes de não possuem telefone */ SELECT * FROM CLIENTE WHERE COD_CLI NOT IN (SELECT COD_CLI FROM FONE)

/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes que possuem email */ SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM EMAIL)

/* seleciona todos os registros da tabela CLIENTE onde exibe os clientes que fizeram pedidos */ SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM PEDIDO)

Alguns casos podem ser resolvidos tanto por SUBQUERIES como por JOINS, outros apenas por SUBQUERIES.

Banco de Dados
Autor: Nilson A. Borges 57 de 88

MICROSOFT SQL SERVER 2005

15. CRIANDO VISÕES (VIEW)
As views nada mais são do que instruções SELECT já pré-definidas e armazenadas no banco. É um objeto do SQL Server utilizado para dar nome a uma query. Este conceito pode parecer simples, e é, mas pode-se resolver muitos problemas com as views. Uma view não é um programa, portanto dentro dela você só pode escrever o comando Select. Você pode colocar dentro de uma view o comando select feito com as seguintes critérios: Consultas com união (Join) Consultas com união (Union) Consultas com Group By com função de totalização Consultas com subconsultas (Subquery) Consultas com Order By apenas com Top. Uma view não pode ter um select com order by sem a clausula Top. Uma view não recebe parâmetros de entrada. Para criar uma view, utilizamos o comando CREATE VIEW. Sua sintaxe: Sintaxe: CREATE VIEW <view_name> AS <instrução_SELECT> Exemplos:

/* Criar uma view que seleciona todos os registros da tabela CLIENTE onde o campo CODIGO for igual a 1 ou 2 ou 3 ou 4 */ CREATE VIEW V_CLIENTE AS SELECT * FROM CLIENTE WHERE COD_CLI IN (1,2,3,4)

Para testar a View digite somente o código abaixo SELECT * FROM V_CLIENTE Banco de Dados
Autor: Nilson A. Borges 58 de 88

MICROSOFT SQL SERVER 2005

Suponha que necessitamos liberar o acesso aos dados da tabela Funcionário, mas não podemos liberar o acesso aos dados da coluna Salário (Sal_Func). Para solucionar esta questão, você poderia criar uma View sobre essa tabela e liberar para o usuário acesso à tabela apenas por meio da view:

/* Criar uma view Funcionário da situação relatada anteriormente */ CREATE VIEW V_FUNC AS SELECT COD_FUNC,NOME_FUNC, SEXO_FUNC,END_FUNC FROM FUNCIONARIO

Para testar a View digite somente o código abaixo SELECT * FROM V_FUNC Outro ponto importante sobre as views: não podemos utilizar a cláusula ORDER BY na definição da view. Como uma exceção: quando se utiliza TOP para limitar os registros: -- Isto é uma definição válida de uma view CREATE VIEW V_PEDIDO AS SELECT TOP 50 NUM_PED,COD_CLI,DATA_PED FROM PEDIDO ORDER BY DATA_PED Para testar a View digite somente o código abaixo SELECT * FROM V_FUNC

Não podemos utilizar as cláusulas COMPUTE, COMPUTE BY e INTO dentro de uma view

Banco de Dados
Autor: Nilson A. Borges 59 de 88

MICROSOFT SQL SERVER 2005

16. CRIANDO STORED PROCEDURE (PROCEDIMENTOS)
Stored Procedures: são conjuntos de instruções, armazenados em bancos de dados, que realizam operações com os demais dados do banco. São úteis em um programa por várias razões, uma delas é para se evitar a necessidade de ler os dados do banco, fazer as operações neles e depois gravar novamente. Outra é pela possibilidade que trazem de se balancear o processamento entre o servidor de banco de dados e o servidor da aplicação que acessa o banco. Possuem 2 tipos a respeito a execução: dinâmica e estática. A utilização da palavra dinâmico na computação, em geral, representa algo mais desejável do que sua contrapartida estática. Como exemplo podemos comparar as funcionalidades de uma página web dinâmica com uma página web estática ou mesmo na resolução dinâmica de nomes (DNS) com uma resolução estática. Pois bem, nem sempre devemos preferir o que é dinâmico ao que é estático por vários motivos. No que diz respeito aos bancos de dados, sempre que possível devemos utilizar instruções estáticas. As instruções estáticas são aquelas que normalmente programamos em uma aplicação e que serão encaminhadas para o banco de dados por um método de acesso. Elas podem ser estáticas para o banco de dados e serem montadas dinamicamente na aplicação. Para explicar como funcionam os comandos dinâmicos no SQL Server vou utilizar um exemplo. Suponham que, por alguma necessidade, precisamos fazer um SELECT em uma tabela através de uma Stored Procedure. Mas não sabemos em qual tabela devemos utilizar, ou seja, somente em tempo de execução saberemos qual tabela devemos consultar. Nesta situação uma boa opção é utilizar o recurso de execução dinâmica de instruções SQL.

Banco de Dados
Autor: Nilson A. Borges 60 de 88

MICROSOFT SQL SERVER 2005

Esta execução dinâmica funcionará da seguinte forma: uma string deve ser montada com a instrução que desejamos executar. Esta string deve possuir uma instrução sintaticamente correta para o SQL Server e, tendo esta string montada, devemos executa-la em tempo de execução. No nosso exemplo, vamos passar como parâmetro de entrada de uma Stored Procedure no nome da tabela que desejamos consultar. Em seguida vamos concatenar o valor do parâmetro com uma string e colocar a string completa dentro de uma variável. Por fim, iremos executar esta instrução com o comando EXECUTE() do SQL Server. O código desta Stored Procedure é mostrado abaixo:

/* Esta Procedure vai fazer um Select Dinâmico em alguma Tabela */ CREATE PROCEDURE ST_SQL_DINAMICO @NOME_TABELA VARCHAR(50) AS BEGIN

/* Declarando a Variável que conterá a instrução */ DECLARE @INSTR_SQL VARCHAR(500)

/* Contatenando a instrução com o Nome da Tabela */ SET @INSTR_SQL = "SELECT * FROM " + @NOME_TABELA /* EXECUTANDO A INSTRUÇÃO DINAMICAMENTE */ EXECUTE(@INSTR_SQL) END

Para executar esta Stored Procedure basta indicar qual é o nome da tabela: EXEC ST_SQL_DINAMICO "Infonew.dbo.Cliente"

Banco de Dados
Autor: Nilson A. Borges 61 de 88

MICROSOFT SQL SERVER 2005
Muito bem, vimos como funciona a execução dinâmica de instruções do SQL Server. Mas quais são os pontos negativos da execução dinâmica? Em exemplos como o citado acima não há grandes problemas. O SQL Server só vai ter um pouco de trabalho para fazer o parser da instrução em tempo de execução, compilar e colocar o plano de execução no procedure cache a cada vez que esta Stored Procedure for executada. Se esta Stored Procedure for executada muitas vezes podemos contornar o problema acima utilizando a system Stored Procedure sp_executesql no lugar do EXECUTE(). Para mais informações sobre a sp_executesql procurem na documentação oficial do SQL Server, o Books Online, que contém uma boa descrição de seus parâmetros e alguns exemplos de uso. Outro inconveniente da execução dinâmica é o retorno de dados. Se desejarmos fazer alguma manipulação nos dados retornados por uma execução dinâmica, devemos fazer uso de uma tabela temporária que será preenchida com o retorno da execução. Esta tabela temporária vai armazenar o último resultado da(s) instrução(es) dinâmica(s) e deve conter a mesma quantidade e tipos de dados das colunas que o resultado.

16.1 Stored Procedure (Parâmetros de Saída):
Stored Procedure - Passagem de parâmetros em SQL Server 2000”, trago agora neste texto, uma forma prática de como usar parâmetros de saídas, que é um recurso complementar ao trabalho com stored procedure. Lembrando que continuamos usando como exemplo o Microsoft SQL Server 2005, mas os conceitos básicos podem ser aplicados em praticamente todos os bancos de dados relacionais do mercado. Parâmetros de saída O uso de parâmetros de saída em stored procedure possibilita que o engine do servidor de banco de dados utilize menos recursos de hardware para retornar e exibir os resultados de uma instrução SQL, possibilitando um aumento de performance em seu envio, processamento e saída. Banco de Dados
Autor: Nilson A. Borges 62 de 88

MICROSOFT SQL SERVER 2005
Vale lembrar também, que o uso de parâmetros de saída, permite uma boa manipulação dos valores retornados. O comando CREATE PROCEDURE (com o uso de OUTPUT) Para especificar que um stored procedure terá uma variável do tipo saída, use a forma normal de sintaxe para criação de stored procedure adicionando o flag OUTPUT no final da declaração de cada variável, veja a sintaxe na Listagem 1: Create Procedure NOME_DA_PROCEDURE (@VARIÁVEL

TIPO_DE_DADO OUTPUT) As Begin

**

Instrução

SQL

desejada

atribuindo

um

valor

ao

parâmetro(variável) **

end Listagem 1. Sintaxe do comando CREATE PROCEDURE. Executando uma procedure e recuperando seu valor de retorno. Para invocar a execução de um stored procedure, é usado a mesma sintaxe simples EXEC NOMEPROCEDURE, porém, a diferença está na necessidade em declararmos uma variável com o mesmo tipo de dado do parâmetro, e especificarmos que ela receberá o valor retornado pelo parâmetro de saída através da função “output”.

Banco de Dados
Autor: Nilson A. Borges 63 de 88

MICROSOFT SQL SERVER 2005

Veja na Listagem 2, a sintaxe básica para esse tipo de execução: /*Declaração de variáveis que receberam o resultado da procedure */ declare @VARIÁVEL tipo ... /*execução e atribuição do valor de retorno. */ exec NomeStoredProcedure @VARIÁVEL output … /* Manipulação do resultado. */ PRINT 'O valor é: '+@VARIAVEL

Listagem 2. Sintaxe de execução de um stored procedure e recuperação do valor retornado através do uso da função output. Lembrando que você pode aplicar todos os recursos de criação e execução de stored procedure, como por exemplo, as funções: alter procedure, drop procedure, with encryption, etc. Exemplos práticos: Veja aqui, alguns exemplos práticos que mostram como criar stored procedure com parâmetros de saída. Nota 01 Você pode testar esses scripts em qualquer database, porém antes, é necessário criar e inserir dados na tabela de exemplo conforme a Listagem 3.

/*Criação da tabela que será o objeto de nossos exemplos */ create table FUNCIONARIOS (CODIGO varchar(5), NOME varchar(80), FUNCAO int, DEPARTAMENTO int, Banco de Dados
Autor: Nilson A. Borges 64 de 88

MICROSOFT SQL SERVER 2005
SALARIO money CONSTRAINT PK_CODIGO PRIMARY KEY (CODIGO))

go

/*Inserções para povoamento da tabela de FUNCIONARIOS */ insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00001','OSCAR ALHO DA SILVA', '5','30', 2500)

go

insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00002','JOÃO DA SILVA SAURO', '5','30', 3500)

go

insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00003','MARIA DA BOA MORTE', '7','20',1500)

go

insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00004','BENEVENUTO LOPES ARAUJO', '7','10',1500)

go

insert into FUNCIONARIOS (CODIGO, NOME,FUNCAO,DEPARTAMENTO, SALARIO ) values('00005','MATUZALEM ALVES', '5','30',1500) Banco de Dados
Autor: Nilson A. Borges 65 de 88

MICROSOFT SQL SERVER 2005

Listagem 3. Script SQL para Criação e povoamento da tabela de testes(FUNCIONARIOS). Exemplo 02 - Implementação de um procedure com um parâmetro de saída /*Procedure simples para recuperar a soma dos salários da tabela FUNCIONARIOS */

create procedure sp_BuscaSalario (@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS end

/*Execução do stored procedure */ /*Declaração de variáveis que receberam o resultado do procedure */ declare @SALARIO_TOTAL money /*execução*/ exec sp_BuscaSalario @SALARIO_TOTAL output /* Manipulação do resultado*/ PRINT 'Salário total R$'+(CAST(@SALARIO_TOTAL AS

varchar(20)))

Banco de Dados
Autor: Nilson A. Borges 66 de 88

MICROSOFT SQL SERVER 2005
Listagem 4. Recuperando o valor de uma soma de consulta. Exemplo 03 - Recuperando um valor e aplicando uma estrutura de decisão /*Procedure simples para recuperar a soma dos salários e aplicar uma estrutura de decisão*/ Create Procedure sp_BuscaSalario2 (@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS end

/*Execução do procedure */ declare @SALARIO_TOTAL money exec sp_BuscaSalario2 @SALARIO_TOTAL output

if @SALARIO_TOTAL < 20000 begin print '***SALÁRIO BAIXO***** ' print 'Salário total R$'+(CAST(@SALARIO_TOTAL AS

varchar(20))) end else begin print '***SALÁRIO ALTO***** ' print 'Salário total R$'+(CAST(@SALARIO_TOTAL AS

varchar(20))) end

Banco de Dados
Autor: Nilson A. Borges 67 de 88

MICROSOFT SQL SERVER 2005
Listagem 5. Parâmetros e estrutura IF ..ELSE.. Exemplo 04 - Passando e Recuperando parâmetros /*Procedure com passagem de parâmetro como critério de seleção para recuperar a soma dos salários da tabela FUNCIONARIOS através de parâmetro de saída*/ create procedure sp_BuscaSalario_porDepto (@DEPTO int,

@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS where DEPARTAMENTO=@DEPTO end /*Execução do procedure */ /*Variável de saída */ declare @SALARIO_TOTAL money /*Variável para passagem de parâmetro*/ declare @DEPARTAMENTO int set @DEPARTAMENTO=30 /*execução*/ exec sp_BuscaSalario_porDepto @DEPARTAMENTO, @SALARIO_TOTAL output PRINT 'Salário total do departamento '+ cast(@DEPARTAMENTO as varchar)+ ' é R$'+(CAST(@SALARIO_TOTAL AS varchar(20)))

Banco de Dados
Autor: Nilson A. Borges 68 de 88

MICROSOFT SQL SERVER 2005

17. CRIANDO FUNCTION (UDF :FUNCÕES DEFINIDAS PELO O USUÁRIO )
FUNÇÕES DEFINIDAS PELO USUÁRIO - UDF Nas linguagens de programação as funções quebram grandes tarefas de processamento de dados em pequenas partes. Conjuntos complexos de funções podem ser divididos em pequenas unidades lógicas mais facilmente gerenciáveis. Qualquer código que deve executar uma tarefa lógica específica, quando incorporado a uma função, pode ser chamado de dentro de um programa sem a necessidade de repetir o código responsável por aquela tarefa várias vezes. Uma função definida pelo usuário (UDF) é um módulo de instruções Transact-SQL que pode ou não possuir argumentos e que retorna um resultado. Por exemplo, uma função pode informar o valor de uma parcela mensal a partir de uma taxa de juros informada, calcular a distância entre dois pontos, selecionar uma lista de empregados que pertencem a um departamento, etc. Uma UDF é muito parecida com uma stored procedure, ou seja, possui instruções que controlam o fluxo do programa e a manipulação dos dados. Uma UDF difere de uma stored procedure nos seguintes aspectos: • Não permite qualquer alteração no estado global da sessão, por exemplo, como a mudança do banco de dados. • • Não permite a utilização de parâmetros com a clásula OUTPUT. Não pode ser usada com a opção “FOR XML” para obtenção do resultado. Portanto, a opção “FOR XML” pode ser utilizada apenas em stored procedures.

Banco de Dados
Autor: Nilson A. Borges 69 de 88

MICROSOFT SQL SERVER 2005



Erros do Transact-SQL que causam o cancelamento da instrução, e então continuam na próxima instrução de um módulo (como em triggers e stored procedures) são tratados de modo diferente dentro de uma função. Em uma função, os erros encontrados em instruções Transact-SQL interrompem seu processamento.

Entretanto, se você necessita de procedimentos que retornam resultados, uma UDF é frequentemente a melhor escolha para uma aplicação SQL, pelo simples fato de poder ser chamada a partir de uma instrução SQL.

17.1 Definindo uma function UDF:
Antes de poder definir uma UDF, deve-se determinar suas características, tais como, seu nome, sua vinculação ou não aos objetos referenciados, o número e tipos de dados dos parâmetros que ela terá, e finalmente, os tipos de valores retornados. Você então executa a instrução CREATE FUNCTION para criar a UDF. Caso após definir a função, você venha a descobrir que qualquer uma das características não são apropriadas, você poderá usar a instrução ALTER FUNCTION para alterar as informações utilizadas em sua definição. Você não poderá fazer uso da instrução ALTER FUNCTION para modificar o tipo de uma função, ou seja, uma função do tipo scalar valued para uma função do tipo table valued ou vice-versa. Similarmente, você não poderá utilizar a instrução ALTER FUNCTION para modificar uma função do tipo inline para uma função multi-statement ou vice-versa. Entretanto, você poderá remover funções UDF com a instrução DROP FUNCTION. É necessário ter permissão sobre a instrução CREATE FUNCTION para criar, alerar ou excluir UDFs. Outros usuários, além do criador da UDF, devem ter as permissões apropriadas antes de poder utilizá-la em instruções Transact-SQL. Para criar ou alterar tabelas com CHECK constraint, cláusula

Banco de Dados
Autor: Nilson A. Borges 70 de 88

MICROSOFT SQL SERVER 2005
DEFAULT ou uma computed column, que façam referências a UDFs, o usuário deve ter a permissão de REFERENCES sobre a função. As instruções válidas em uma função incluem: • • A instrução DECLARE poderá ser utilizada para definer as variáveis e cursores que serão locais para a função. As atribuições de valores para objetos locais da função são permitidas com a utilização da opção SET para variáveis locais do tipo table e scalar. • Operações com cursores locais que são declarados, abertos, fechados e liberados dentro da função. A instrução FETCH que retorna dados para o cliente não é permitida. Apenas a instrução FETCH que atribui valores para variáveis locais e que utilizam a cláusula INTO são permitidas. • • • • São permitidas as instruções de controle de fluxo (tais como IF..ELSE, WHILE, RETURN, GOTO, BREAK, and CONTINUE). As instruções SELECT que contenham expressões que atribuam valores para variáveis que são locais para a função. As instruções UPDATE, INSERT, and DELETE que modificam variáveis do tipo table que são locais para a função. A instrução EXECUTE com chamadas para extended stored procedures.

As seguintes regras se aplicam quando uma UDF faz chamadas a uma extended stored procedure:



A extended stored procedure não pode retornar dados para o cliente. Se a stored procedure retorna dados, a execução da função chamadora falhará.



A extended stored procedure pode se reconectar ao SQL Server; entretanto, a chamada a extended stored procedure deve fazer parte da mesma transação que a função que a chamou



As funções que chamam extended stored procedure são marcadas como funções nondeterministic. (Veja abaixo no ítem determinismo da função). Banco de Dados

Autor: Nilson A. Borges

71 de 88

MICROSOFT SQL SERVER 2005



A extended stored procedure é executada no contexto de segurança da conta de usuário do Microsoft Windows® sob a qual o SQL Server está rodando. O criador da stored procedure deve considerer isso quando atribuir direitos de EXECUTE para os usuários.

17.2 Tipos de Function:

O SQL Server 2000 implementa três tipos de UDFs assim conhecidas: • • • Scalar valued functions Inline table valued functions Multi-statement table valued functions

17.2.1. Funções Scalar valued:
Uma função definida pelo usuário do tipo scalar valued retorna um único valor em resposta a cada uma das chamadas à função. Uma função é do tipo scalar valued se a cláusula de retorno especifica um tipo de dado scalar do SQL Server. Funções do tipo Scalar valued podem ser definidas com a utilização de múltiplas instruções Transact-SQL. Exemplo: CREATE FUNCTION Volume (@Altura decimal (4,1), @Largura decimal (4,1), @Profund decimal (4,1)) RETURNS decimal (12,3) –- tipo de dado de retorno. AS BEGIN RETURN (@Altura * @Largura * @Profund) END A cláusula RETURNS, no exemplo anterior, especifica que um decimal scalar_data_type sera retornado pela função. A cláusula RETURNS Banco de Dados
Autor: Nilson A. Borges 72 de 88

MICROSOFT SQL SERVER 2005
pode ser qualquer um dos tipos de dados conhecidos como scalar_data_types do SQL Server exceto timestamp, text, ntext, or image. Para as funções do tipo scalar valued, utiliza-se a instrução RETURN com um argumento. O valor desse argumento é retornado como o resultado da função. O tipo de dado do argumento passado com a instrução RETURN deve poder ser implicitamente convertido para o tipo de dado do valor de retorno da função.

Nas chamadas às funções do tipo scalar, deve-se utilizar ou o formato de nome nome_do_usuário.nome_da_função ou

nome_do_banco_de_dados. nome_do_usuário.nome_da_função Você não pode usar o nome da função isoladamente; essa restrição existe para diferenciar as chamadas às UDFs das chamadas às funções do SQL Server. Nós poderíamos chamar a função que definimos anteriormente da seguinte forma: Para testar a Function

Select dbo.Volume(12.2,10.6,10.0)

17.2.2. Funções Table Valued:
Para funções do tipo inline table valued, a cláudula RETURNS é seguida da palavra TABLE sem uma lista de colunas. As funções do tipo inline table valued retornam valores apresentados como se extraídos de tabelas e são definidas com uma única instrução SELECT em sua construção. As colunas, incluindo os tipos de dados retornados pela função, são derivados da lista da instrução SELECT que define a função.

Banco de Dados
Autor: Nilson A. Borges 73 de 88

MICROSOFT SQL SERVER 2005
Exemplo: CREATE (30)) RETURNS TABLE AS RETURN ( SELECT CustomerID, CompanyName FROM Northwind.dbo.Customers WHERE Region = @Regiao ) A cláusula RETURNS no exemplo acima apresenta apenas a palavra TABLE sem especificar qualquer lista de colunas desejadas. Note também que existe uma única instrução RETURN que contém a instrução SELECT com a definição do corpo da função. Para testar a Function : SELECT * FROM fn_Clientes_na_Regiao (N'WA') Outros Exemplos 1) Escreva uma função que recebe o código do cliente como parâmetro e retorna a renda salarial deste cliente, incluindo na sua renda o salário do seu conjuge se ele for casado.*/ FUNCTION fn_Clientes_na_Regiao (@Regiao nvarchar

CREATE FUNCTION F_RendaCliConj (@Cod_Cli int) RETURNS decimal(10,2) AS BEGIN RETURN (SELECT Cliente.Renda_Cli + Conjuge.Renda_Conj FROM Cliente LEFT JOIN Conjuge ON Cliente.Cod_Cli = Conjuge.Cod_Cli WHERE Cliente.Cod_Cli = @Cod_Cli) END Banco de Dados
Autor: Nilson A. Borges 74 de 88

MICROSOFT SQL SERVER 2005
Para Testar SELECT dbo.F_RendaCliConj(1) SELECT dbo.F_RendaCliConj(2) SELECT dbo.F_RendaCliConj(3) 2) Escreva uma função que retorna a renda salarial de todos os cliente, incluindo na renda de cada um o salário do seu conjuge daqueles que são casados. CREATE FUNCTION F_RendaTodosCliConj() RETURNS TABLE AS RETURN (SELECT Cliente.Cod_Cli, Cliente.Renda_Cli + Conjuge.Renda_Conj FROM Cliente LEFT JOIN Conjuge ON Cliente.Cod_Cli = Conjuge.Cod_Cli) Para testar SELECT * FROM F_RendatodosCliConj()

AS Renda

3) Escreva uma função que retorna todos os dados do funcionario cujo código deve ser recebido como parâmetro. CREATE FUNCTION F_Funcionario(@Cod_Func int) RETURNS TABLE AS RETURN(SELECT * FROM Funcionario WHERE Cod_Func = @Cod_Func) Para testar SELECT * FROM F_Funcionario(11)

Banco de Dados
Autor: Nilson A. Borges 75 de 88

MICROSOFT SQL SERVER 2005
4) Escreva uma função de recebe o número de um pedido como parâmetro e retorna o código do funcionário que atendeu este pedido e o valor e data de vencimento de cada parcela deste pedido. CREATE FUNCTION F_PedPar (@Num_Ped int) RETURNS TABLE AS RETURN (SELECT Funcionario.Cod_Func, Parcela.Val_Venc, Parcela.Data_Venc FROM Funcionario INNER JOIN Pedido ON Funcionario.Cod_Func = Pedido.Cod_Func INNER JOIN Parcela ON Pedido.Num_Ped = Parcela.Num_Ped WHERE Pedido.Num_Ped = @Num_Ped) Para testar SELECT * FROM F_PedPar(1)

17.2.3. Funções Multi-Statement Table Valued:
Se a cláusula RETURNS especificar uma tabela com suas colunas e tipos de dados, a função será do tipo multi-statement table valued. Exemplo: CREATE money) RETURNS @OrderShipperTab TABLE ( ShipperID int, FUNCTION LargeOrderShippers (@FreightParm

ShipperName nvarchar (80), OrderID int,

ShippedDate datetime, Freight ) AS BEGIN INSERT @OrderShipperTab SELECT S.ShipperID, S.CompanyName, Banco de Dados
Autor: Nilson A. Borges 76 de 88

money

MICROSOFT SQL SERVER 2005
O.OrderID, O.ShippedDate, O.Freight FROM Shippers AS S INNER JOIN Orders AS O ON S.ShipperID = O.ShipVia WHERE O.Freight > @FreightParm RETURN END

A cláusula RETURNS no exemplo acima define uma variável local de retorno do tipo table chamada @OrderShipperTab, e também define a estrutura da tabela com a definição das colunas. As instruções no corpo da função inserem linhas na variável table local @OrderShipperTab para construir a tabela que será o resultado retornado pela função. Note que a instrução RETURN não tem argumento. O valor da variável local do tipo table definida sera o valor retornado pela função. A seguir temos um exemplo de como chamar a função do tipo multistatement table valued:

SELECT * FROM LargeOrderShippers ($500)

Opcionalmente, chamadas às funções do tipo table valued poderão ser seguida de um alias para a tabela. Pode-se também utilizar um alias para se referir às colunas que são retornadas pela função nas cláusulas SELECT e WHERE.

Banco de Dados
Autor: Nilson A. Borges 77 de 88

MICROSOFT SQL SERVER 2005

18. CRIANDO TRIGGERS (GATILHOS )
Triggers são procedimentos que podem ser gravados em Transact SQL, Java, PL/SQL ou C. São executados (ou disparados) implicitamente quando uma tabela é modificada, um objeto é criado ou ocorrem algumas ações de usuário ou de sistema de banco de dados. As triggers são similares as stored procedures diferindo, apenas, na maneira como são chamadas. As Triggers são chamadas indiretamente pelos comandos INSERT, UPDATE ou DELETE executada implicitamente quando ocorre algum evento de trigger enquanto a stored procedure deve ser executado explicitamente. Uma trigger é composta por quatro partes: • • • • Momento Evento Tipo Corpo

O momento define quando uma trigger irá ser acionada. Pode ser: • • • BEFORE (tabela) AFTER (tabela) INSTEAD OF (view)

BEFORE indica que os comandos PL/SQL do corpo da trigger serão executados ANTES dos dados da tabela serem alterados. Normalmente usamos BEFORE nos casos em que precisamos incializar variáveis globais, validar regras de negócios, alterar o valor de flags ou para salvar o valor de uma coluna antes de alterarmos o valor delas.

Banco de Dados
Autor: Nilson A. Borges 78 de 88

MICROSOFT SQL SERVER 2005
Exemplo: / * Escreva um trigger que realize a baixa em estoque a cada produto vendido em cada pedido * / CREATE TRIGGER T_BaixaEstoque ON Itens BEFORE INSERT AS IF(SELECT Cod_Sta FROM Pedido INNER JOIN inserted ON Pedido.Num_Ped = Inserted.Num_Ped) = 1 --Se o Pedido estiver aberto

UPDATE Produto SET Qtd_EstqProd = Qtd_EstqProd -

Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE BEGIN RAISERROR('Este pedido não está aberto -

Operação não Executada',16,1) ROLLBACK TRANSACTION RETURN END AFTER indica que os comando PL/SQL do corpo da trigger será executado APÓS os dados da tabela serem alterados. Normalmente usamos AFTER para completar os dados de outras tabelas e para completar a atividade de outra trigger de momento BEFORE.

Banco de Dados
Autor: Nilson A. Borges 79 de 88

MICROSOFT SQL SERVER 2005
Exemplo:

CREATE TRIGGER T_BaixaEstoque ON Itens AFTER INSERT AS IF(SELECT Cod_Sta FROM Pedido INNER JOIN inserted ON Pedido.Num_Ped = Inserted.Num_Ped) = 1 --Se o Pedido estiver aberto

UPDATE Produto SET Qtd_EstqProd = Qtd_EstqProd -

Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE BEGIN RAISERROR('Este pedido não está aberto -

Operação não Executada',16,1) ROLLBACK TRANSACTION RETURN END INSTEAD OF indica que a trigger irá ser executada no lugar da instrução que disparou a trigger. Literalmente, a instrução é substituída pela trigger. Essa técnica permite que façamos, por exemplo, alterações em uma tabela através de uma view. É usado nos casos em que a view não pode alterar uma tabela por não referenciar uma coluna com a constraint not null. Nesse caso a trigger pode atualizar a coluna que a view não tem acesso.

Banco de Dados
Autor: Nilson A. Borges 80 de 88

MICROSOFT SQL SERVER 2005
Dois detalhes muito importantes sobre INSTEAD OF: • • Só funcionam com views É sempre de linha. Será considerado assim, mesmo que "FOR EACH ROW" for omitido. Exemplo: /* Escreva um trigger que não permita a alteração e a exclusão de dados na tabela Estado * /.

CREATE TRIGGER T_Estado ON Estado INSTEAD OF UPDATE,DELETE AS RAISERROR('Operação não permitida nesta

tabela',16,1) O evento define qual é a instrução DML que aciona a trigger. Informa qual instrução SQL irá disparar a trigger. Pode ser: • • • INSERT UPDATE DELETE

Quando o evento for um UPDATE podemos informar quais colunas que, ao serem alteradas, irão disparar a trigger. O mesmo NÃO ocorre com INSERT e DELETE porque essas instruções sempre afetam a linha por inteiro. Exemplo: CREATE OR REPLACE TRIGGER novo_func AFTER INSERT ON emp . . . END Banco de Dados
Autor: Nilson A. Borges 81 de 88

MICROSOFT SQL SERVER 2005
O evento pode conter uma, duas ou todas as três operações DML em uma única linha de comando. Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp . . . END O tipo define quantas vezes uma trigger será executa. A trigger pode ser executada uma vez para a instrução que a disparou ou ser disparada para cada linha afetada pela instrução que disparou a trigger. Pode ser: - Linha (ROW) Quando a trigger for do tipo instrução ela será disparada uma vez para cada evento de trigger, mesmo que nenhuma linha tenha sido afetada. São úteis para aquelas trigger que eventualmente não alteram dados ou para situações onde o que queremos é uma resposta da trigger, por exemplo, em uma restrição complexa de negócio. Por DEFAULT toda trigger é deste tipo. Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH STATEMENT . . . END Quando a trigger for do tipo linha, a trigger será executada toda vez que a tabela for afetada pelo evento da trigger. Se nenhuma linha for afetada a Banco de Dados
Autor: Nilson A. Borges 82 de 88

Instrução

(STATEMENT)

MICROSOFT SQL SERVER 2005
trigger não será executada. São muito úteis quando a ação da trigger depende dos dados afetados pelo evento da trigger. Exemplo: CREATE OR REPLACE TRIGGER novo_func BEFORE INSERT OR UPDATE OR DELETE ON emp FOR EACH ROW . END

O corpo define a ação que uma trigger irá executar quando acionada. O corpo de uma trigger é composto por um bloco PL/SQL, a chamada de uma PROCEDURE ou por um procedimento JAVA. Por definição, o tamanho de uma trigger não pode ultrapassar 32K. Como, normalmente, precisamos trabalhar com os valores antes e depois da alteração dos dados, a trigger permite que façamos referencia aos valores antes da alteração (OLD) e após a alteração (NEW). O nome de uma trigger deve ser único dentro de um mesmo esquema, e sua sintaxe básica é: CREATE [OR REPLACE] TRIGGER [schema.]

nome_da_trigger [BEFORE|AFTER] [DELETE|OR INSERT|OR UPDATE[OF coluna]] ON [schema.] nome_da_tabela_ou_da_view [REFERENCING [OLD [AS] OLD] [NEW [AS] NEW] [FOR EACH ROW] [WHEN [condição]] BLOCO PL/SQL

Onde: a) Nome_da_trigger é o nome da trigger; Banco de Dados
Autor: Nilson A. Borges 83 de 88

MICROSOFT SQL SERVER 2005
b) Nome_da_tabela_ou_da_view indica a tabela ou view associada com a trigger; Corpo_da_trigger é a ação que a trigger irá executar. c) Inicia por DECLARE ou BEGIN e termina por END. Também pode conter a chamada de um procedimento. d) O uso do nome da coluna na cláusula UPDATE pode aumentar a performance porque a trigger só será disparada quando aquela coluna especificada na cláusula for alterada. Agora que sabemos como criar uma trigger veremos um exemplo completo: Primeiro vamos criar uma tabela para gravar um registro de todos os usuários que se conectaram ao banco: CREATE TABLE vigia (marca VARCHAR2(100));

CREATE OR REPLACE TRIGGER marca_logon AFTER LOGON ON DATABASE BEGIN INSERT INTO sys.vigia VALUES (USER || ' entrou no sistema em ' || TO_CHAR(sysdate, HH24:MI:SS')); COMMIT; END Pronto, temos nossa primeira trigger. Ela registra o nome do usuário e a que horas ele entrou. Esse exemplo foi retirado diretamente da documentação Oracle. No nosso exemplo fazemos referencia a um evento do sistema ao invés de referenciarmos uma tabela. Outros eventos do sistema são: • AFTER SERVERERROR Banco de Dados
Autor: Nilson A. Borges 84 de 88

'DD-MM-YYYY

MICROSOFT SQL SERVER 2005
• • • • AFTER LOGON BEFORE LOGOFF AFTER STARTUP BEFORE SHUTDOWN Você pode criar triggers usando os eventos acima para DATABASE e SCHEMA. As duas exceções são SHUTDOWN e STARTUP que só se aplicam a DATABASE. Exemplo: CREATE OR REPLACE TRIGGER marca_logoff BEFORE LOGOFF ON SCHEMA BEGIN INSERT INTO sys.vigia VALUES (USER || ' saiu do sistema em ' || TO_CHAR(sysdate, HH24:MI:SS')); COMMIT; END; 'DD-MM-YYYY

Eventualmente podemos ter algum tipo de erro em nossa trigger. Para verificar quais são os erros de compilação que temos na trigger basta usar o comando SHOW ERRORS TRIGGER nome_da_trigger. Caso você queira ver os erros de compilação da última trigger que você compilou pode escrever apenas SHOW ERRORS ou SHO ERR. Ao executarmos esse comando ele mostrará a linha onde está o erro. Atenção: caso a linha onde está o erro se estenda por mais de uma linha, este comando indicará o início da linha.

Banco de Dados
Autor: Nilson A. Borges 85 de 88

MICROSOFT SQL SERVER 2005
Vamos criar uma trigger com erro para servir como exemplo: CREATE OR REPLACE TRIGGER marca_logon AFTER LOGON ON DATABASE BEGIN INSERT INTO sys.vigia VALUES (USER || ' entrou no sistema em ' || TO_CHAR(sysdate, HH24:MI:SS)); COMMIT; END; 'DD-MM-YYYY

Banco de Dados
Autor: Nilson A. Borges 86 de 88

MICROSOFT SQL SERVER 2005

CONSIDERAÇÕES FINAIS
Esta apostila foi confeccionada para os alunos da Instituição Faculdade Anchieta como um material de apoio para a disciplina Banco de Dados onde é utilizado o SGDB SQL Server 2005 versão Express. Em caso de dúvida mandar e-mail para [email protected] , não esqueça de citar as mensagens de erro.

Banco de Dados
Autor: Nilson A. Borges 87 de 88

MICROSOFT SQL SERVER 2005

REFERÊNCIAS BIBLIOGRÁFICAS:
Leão, Renata de Oliveira SQL 2000 SERVER: Estrutura e Implementação de Sistemas de Banco de Dados São Paulo , Editora Erica, 2002 Gunderloy,Mike e Jorden,Joseph L. Dominando o SQL SERVER 2000: A Bíblia São Paulo , Editora Makron Books, 2001

Banco de Dados
Autor: Nilson A. Borges 88 de 88

Sponsor Documents

Or use your account on DocShare.tips

Hide

Forgot your password?

Or register your new account on DocShare.tips

Hide

Lost your password? Please enter your email address. You will receive a link to create a new password.

Back to log-in

Close