Professional Documents
Culture Documents
NDICE
1. 2. 3. INTRODUO .................................................................................................................................. 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 MEMRIA ..................................................................................................... 8 2.1.3 REQUISITOS DE DISCO RGIDO ............................................................................................. 8 2.2 SQL SERVER MANAGEMENT STUDIO ...................................................................................... 9 PROFILER ............................................................................................ Erro! Indicador no definido. SQL SERVER BOOKS ON-LINE ....................................................... Erro! Indicador no definido. 4. 5. OS DATABASES DO SQL-SERVER ............................................................................................ 12 CRIAO DE UM DATABASE .................................................................................................... 18
5. INSERT (INSERE REGISTRO) ......................................................................................................... 29 6. UPDATE (ALTERA VALOR DO REGISTRO) ............................................................................... 30 7. DELETE (EXCLUSO DE REGISTROS) ....................................................................................... 32 8. APRESENTANDO O SISTEMA INFONEW .................................................................................... 33 8.1 OS OBJETIVOS GERAIS DO INFONEW SO: ......................................................................... 33 PARTE 1 MANTER DADOS A RESPEITO DOS CLIENTES DA EMPRESA..................................................... 33 PARTE 2 ANLISE 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 FUNCIONRIOS ................................................................. 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 (RESTRIES) ..................................................................................................................... 40 9.4 BETWEEN (CONDIO COM UMA FAIXA DE VALORES) ................................................................... 41 9.5 LIKE (COMPARAO COM UMA PARTE DE UMA LITERAL) ................................................................ 42 9.6 DISTINCT (VALORES NICOS) ................................................................................................... 43 9.7 IN (CONDIO COM VALORES FIXOS) ................................................................................... 44 10. FUNES DE AGRUPAMENTO ................................................................................................... 45 10.1 COUNT (CONTADOR DE REGISTROS) .............................................................................................. 45 10.1.1 GROUP BY (Agrupamento de dados) ..................................................................................... 46 10.2 SUM (SOMATRIA DE VALORES) .................................................................................................... 47 10.3 AVG (MDIA DE VALORES) ............................................................................................................ 48 10.4 MIN, MAX (MENOR E MAIOR VALOR) ............................................................................................ 49 11.HAVING (CONDIO DO AGRUPAMENTO) ............................................................................. 50
Banco de Dados
Autor: Nilson A. Borges 2 de 88
Banco de Dados
Autor: Nilson A. Borges 3 de 88
1. INTRODUO
Veremos nesta apostila de forma simplificada os comandos de manipulao e consultas de dados, bem como suas clausulas, operadores e funes. 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 permisses. DENY Nega permisses. REVOKE Revoga a concesso ou a negao de permisso. DDL- Data Definition Language- Linguagem de Definio de dados. CREATE Cria objeto no sistema. ALTER Altera a estrutura dos objetos. DROP Elimina objetos do sistema. DML- Data Manipulation Language Linguagem de Manipulao 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 incluso de grande quantidade de dados em uma tabela.
Banco de Dados
Autor: Nilson A. Borges 4 de 88
O SQL SERVER 2005 est disponvel em vrias edies, cada qual adequada a uma tarefa ou um ambiente especfico. importante entender as diferenas entre as edies disponveis, de modo que voc possa selecionar a mais apropriada para suas necessidades:
Enterprise Edition: Uma edio abrangente do SQL SERVER desenvolvida para oferecer nveis extremamente altos de escalabilidade e desempenho. Use essa edio em aplicaes de misso crtica em nvel empresarial e de larga escala. O Enterprise Edition contm todos os recursos do Standard Edition,
alm de recursos empresariais, incluindo: a) Cluster de failover b) Espelhamento de Banco de Dados c) Bancos de Dados de instantneos d) Backups espelhados e) Restaurao online de pginas e arquivos f) Modos de exibio particionados distribudos g) Replicao heterognea h) Replicao ponto a ponto Banco de Dados
Autor: Nilson A. Borges 6 de 88
Standard Edition : Desenvolvido para aplicaes em nvel de departamento. Use essa edio se voc no precisar dos nveis de escalabilidade, desempenho e disponibilidade oferecidos pela Enterprise Edition.
Workgroup Edition: Uma verso do SQL SERVER 2005 para organizaes de pequeno porte que precisam de um Banco de Dados sem limites de tamanho e nmeros de usurios. A Workgroup Edition pode atuar como um servidor Web front-end ou ser usada em operaes departamentais ou de filiais. Essa edio um Banco de dados ideal para iniciantes, alm de ser confivel, eficiente e fcil de gerenciar.
Expression Edition: Uma verso do SQL SERVER 2005 destinada a clientes desconectados ou aplicativos autnomos.
Compact
Edition:
Um
Banco
de
dados
mvel
que
oferece
gerenciamento de dados empresariais para dispositivos inteligentes. Essa edio capaz de replicar dados no SQL SERVER 2005 e no SQL SERVER 2000, permitindo que os usurios mantenham um
Developer Edition: Inclui toda a funcionalidade do Enterprise Edition, mas licenciada para uso como um sistema de desenvolvimento e teste, e no como um servidor de produo. Use essa edio para desenvolver e testar solues de Banco de Dados. possvel atualiz-la para a Enterprise Edition para fins de produo.
Banco de Dados
Autor: Nilson A. Borges 7 de 88
Banco de Dados
Autor: Nilson A. Borges 8 de 88
Banco de Dados
Autor: Nilson A. Borges 9 de 88
Com o SQL SERVER Management Studio, voc executa a maioria das tarefas de administrao 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
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 Mbile.
Object Explorer( Explorador de objetos), que um painel grfico do SQL SERVER Management Studio que voc pode usar para a configurao 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 so fornecidos para consultas Transact-SQL, MDX, DMX e XMLA.
Gerenciamento de scripts baseados em projeto, no qual scripts de criao 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 Solues) 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 manuteno de cpias de scripts, conforme o seu desenvolvimento.
Banco de Dados
Autor: Nilson A. Borges 11 de 88
4. OS DATABASES DO SQL-SERVER
Uma vez instalado o SQL Server so criadas automaticamente quatro databases: a) master b) model c) tempdb d) msdb Depois, o poderemos criar e instalar nossos prprios bancos de dados livremente, os quais sero os bancos de dados de usurio. Embora ambos os tipos de bancos de dados (sistema e usurio) armazenem dados, o SQL Server utiliza os bancos de sistema para operar e gerenciar o sistema. O catlogo 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
Banco de Dados
Autor: Nilson A. Borges 12 de 88
MODEL Fornece um prottipo (template) para um novo banco de dados. Contm as tabelas de sistema que sero inseridas em cada banco de dados de usurio. As seguintes implementaes podem ser realizadas neste database: a) tipos definidos pelo usurio (user datatypes), regras (rules), padres (defaults), stored procedures; b) usurios que tero acesso a todos os bancos adicionados ao sistema (administradores); c) privilgios padro, notadamente aos usurios guest (guest accounts); O tamanho padro deste banco de 1 Mbyte, e sua estrutura bsica pode ser vista na figura a seguir; as 18 tabelas mostradas sero 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 dx s y in ee s s e mn y s g e ts
s s es yk y ss ps y ty e
Este conjunto de 18 tabelas conhecido como Catlogo do Banco de Dados, e suas funes so as seguintes (note que todas possuem o prefixo sys): Banco de Dados
Autor: Nilson A. Borges 14 de 88
Banco de Dados
Autor: Nilson A. Borges 15 de 88
TEMPDB Providencia um espao de armazenamento para tabelas e outras aes temporrias ou intermedirias, tais como resultados que envolvam a clusula GROUP BY, ORDER BY, DISTINCT e cursores (CURSORS). Possui as seguintes caractersticas: a) criado automaticamente no DEVICE MASTER (ateno, DEVICE e DATABASE so coisas diferentes); b) seu contedo apagado quando o usurio fecha a conexo, exceto para tabelas temporrias globais; c) quando o banco parado (stoped) seu contedo apagado completamente; d) seu tamanho padro de 2 Mbytes. e) pode ser colocado em memria RAM.
Banco de Dados
Autor: Nilson A. Borges 16 de 88
relacionadas ao servidor.
Banco de Dados
Autor: Nilson A. Borges 17 de 88
5. CRIAO DE UM DATABASE
Um database uma estrutura lgica dentro da qual so 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 transaes deste sistema (incluses,alteraes e excluses realizadas em seus dados). Os arquivos de dados ficam organizados em grupos de arquivos e o primeiro grupo criado automaticamente no momento da criao do database chama-se PRIMARY.
Banco de Dados
Autor: Nilson A. Borges 18 de 88
Nome: o nome lgico do arquivo. DataFile: E o arquivo fsico do Banco de Dados. Transaction Log: E o arquivo lgico do Banco de Dados. Filename: o nome fsico do arquivo. Deve ser especificado o seu diretrio de criao. 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 mximo de o Arquivo Fsico e/ ou Lgico pode asumir
Banco de Dados
Autor: Nilson A. Borges 19 de 88
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 )
CARACTERSTICA DE UM DATABASE
A Microsoft sugere como tamanho do arquivo lgico do Banco de Dados entre 35% a 40 % do tamanho do arquivo de dados, mas este valor apenas sugestivo pois para definio do tamanho do arquivo lgico depende de outros fatores principalmente o nmero de transaes que este Banco ir receber. Este valores valem somente se este Banco for Transacional.
Banco de Dados
Autor: Nilson A. Borges 20 de 88
Nome: o nome lgico do arquivo. Filename: o nome fsico do arquivo. Deve ser especificado o seu diretrio de criao. Size: o tamanho limite que o arquivo pode alcanar. Filegrowth: o valor por meio do qual o arquivo aumenta de tamanho automaticamente.
Criao de Tabelas
So objetos que vo conter os dados de um sistema. Uma tabela um objeto bidimensional formado por linhas e colunas. As colunas, ou campos, so 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 sero armazenados no disco. Cada tipo de dados ocupa um espao limitado dentro do disco e pode armazenar uma deyerminada faixa de valor. O SQL Server 2005 possuem vrios tipos de datatypes que podem ser utilizados em colunas das tabelas ou em variveis de memria. Possui tambm regras para garantir a integridade e a consistncia dos dados de uma aplicao, necessrio utilizar: Datatypes Nulabilidade Autonumerao Constraints o PK (Primary Key) o FK (Foreign Key)
Banco de Dados
Autor: Nilson A. Borges 21 de 88
Char(n): quando o campo for do tipo alfanumrico e com tamanho fixo, o n quer dizer limitao, o valor mximo de caracteres; Varchar(n) : quando o campo for do tipo alfanumrico e com tamanho no fixo, o n quer dizer limitao, o valor mximo de caracteres; Int: quando o campo for numero com valor inteiro. Decimal (p,s): quando o campo for nmeros com valores decimais, o valor de p o numero de algarismos e o s valor dos algarismos decimais (algarismos aps a virgula).
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 no nulo. Para fazer tal declarao necessrio definir o campo com a clausula: o Not null (no permite valor nulo,preenchimento obrigatrio do campo) o Null (permite valor nulo, preenchimento no obrigatrio do campo)
Banco de Dados
Autor: Nilson A. Borges 22 de 88
Foreign Key(Chave Estrangeira): um campo cujos os dados aparecem necessariamente na chave primria de uma outra tabela, mecanismo principal para efetuarmos relacionamento entre tabelas.
AutoNumerao
Identidade para um banco de dados a forma de identificar cada linha de uma tabela como nica. Para manter a integridade e a consistncia dos dados, necessrio ter uma forma de identific-los como nicos dentro de uma tabela. E para tanto, utilizam-se a chave primria. As chaves primrias normalmente so 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 questo sobre valores nicos nos registros o SQL SERVER 2005 disponibiliza uma propriedade do campo como IDENTITY, onde far a autonumerao na coluna onde for especificada.
Banco de Dados
Autor: Nilson A. Borges 23 de 88
Use bookselva Create table Email ( Cod_email Descricao_email provedor_email int identity not null, not null, not null,
varchar(40) varchar(40)
Banco de Dados
Autor: Nilson A. Borges 24 de 88
Create Table Produto ( Cod_Prod Nome_Prod Qtd_Estoque Val_Prod int identity not null, not null, not null, not null,
Banco de Dados
Autor: Nilson A. Borges 25 de 88
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 boto direito sobre a pasta Database Diagrams e escolha a opo New Database Diagram como mostra a figura abaixo:
Banco de Dados
Autor: Nilson A. Borges 26 de 88
Em seguida aparecer a primeira tela do onde voc dever escolhar as tabelas que iro compor seu diagrama. Selecionar as tabelas Cliente, Itens, NotaFiscal e Produto.
Banco de Dados
Autor: Nilson A. Borges 27 de 88
Depois clicar no boto ADD logo em seguida ir surgir a tela a seguir com o relacionamento das tabelas. Pronto o diagrama das tabelas.
Banco de Dados
Autor: Nilson A. Borges 28 de 88
/*insere os valores (1,Nilson Borges, Av.Paulista,929, Cerqueira Csar, So Paulo, SP, 3285-0202) na tabela CLIENTES */
INSERT
INTO
CLIENTE
VALUES
(Nilson
Borges,
Av.Paulista,929, Cerqueira Csar, So 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 Csar, So Paulo, SP, 3285-0202)
OBS: O valor cod_cli no necessrio inserir pois foi definido como identity que autonumerao e seu
preenchimento automtico
/*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,
Sintaxe: UPDATE <tabela> SET <campo> = <expresso> [WHERE <condio>]; Exemplos: /* atualiza o campo NOME_CLI para Juliana Costa do registro da tabela CLIENTE para o Cd_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 Emisso_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 acrscimo de 12% em todos os campos onde a emisso for menor do que 20/08/2004
Banco de Dados
Autor: Nilson A. Borges 30 de 88
Operadores de Comparao
Descrio Igual a Diferente Maior que Maior ou igual a Menor que Menor ou igual a
Exerccio
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
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 Joo Pedro*/ DELETE FROM CLIENTE WHERE Nome_Cli = Joo Pedro
Exerccios
1) Excluir todas as NotasFiscais onde a Data de Emisso superior a 15/08/2004
2) Excluir todas as NotasFiscais onde o valor total seja menor ou igual a 4520.21
Banco de Dados
Autor: Nilson A. Borges 32 de 88
Parte 1 Manter Dados a Respeito dos Clientes da Empresa Manter dados a respeito dos clientes envolve armazenar todas as informaes a respeito de cada cliente para que ele possa ser encontrado facilmente num momento de necessidade. Nessa empresa, um cliente pode possuir vrios tipos de endereo, por exemplo, endereo residencial, de faturamento, de entrega, de cobrana, etc..., e o sistema tem que ser capaz de armazenar qualquer quantidade e qualquer tipo de endereo para cada cliente individualmente. Cada endereo deve ser o mais completo possvel, contendo alm do nome da rua, do bairro, nmero do prdio, o nome da cidade e do estado dessa cidade. necessrio saber tambm dados a respeito do cnjuge de cada cliente (se ele tiver um cnjuge), pois no clculo do crdito para cada clientes, a renda do cnjuge pode ser considerada. Banco de Dados
Autor: Nilson A. Borges 33 de 88
Parte 2 Anlise do Credito do Cliente Inicialmente, quando um cliente cadastrado no sistema, atribudo a ele um tipo de cliente, ou seja, uma classificao de acordo com a sua renda. O clculo do limite de crdito deve ser uma aplicao que poder ser executada periodicamente, para todos os clientes de uma s vez ou para um cliente especifico. Esse clculo deve levar em considerao o tipo do cliente, a renda do cnjuge, a soma total de pedidos realizados no ano corrente e o atraso mdio nos pagamentos das parcelas. Esse valor que limita o crdito do cliente deve ser levado em considerao sempre antes de realizar uma venda para cada cliente. Parte 3 Manter Dados a Respeito dos Produtos a Serrem Vendidos Cada produto disponvel para venda deve ser classificado por um tipo para que seja possvel realizar totalizaes em estoque, produzindo dados gerenciais. Por exemplo, o sistema deve ser capaz de fornecer informaes como: Quantidade de cada produto vendida num determinado perodo. Quantidade de um determinado tipo de produto vendida em um determinado perodo. Tipo de produto vendido em cada regio de cada cidade. Tipo de produto vendido em cada regio 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 so mais vendidos. Tipos de produto manos vendidos.
Banco de Dados
Autor: Nilson A. Borges 34 de 88
Parte 5 Manter Dados a Respeito dos Funcionrios O sistema deve ser capaz de armazenar dados a respeito dos funcionrios e dos dependentes que cada funcionrio possui. Cada funcionrio deve receber, alem de um salrio fixo, bnus mensais de acordo com os produtos que ele vender. O desempenho de cada funcionrio ser medido por pontos que ele recebe mensalmente. De acordo com essa pontuao, seu bnus pode ser acrescido de determinados valores. Todas as vezes que o salrio fixo de cada funcionrio for alterado, o sistema deve armazenar no histrico o salrio anterior, o atual e a data da alterao.
Banco de Dados
Autor: Nilson A. Borges 35 de 88
Banco de Dados
Autor: Nilson A. Borges 36 de 88
9. SELECT (Consulta)
Descrio: Este comando faz a seleo dos dados de uma ou mais tabelas.
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
SELECT * FROM CLIENTE SELECT * FROM CREDITO SELECT * FROM PRODUTO SELECT * FROM FUNCIONARIO
Banco de Dados
Autor: Nilson A. Borges 37 de 88
Sintaxe: SELECT <campo> FROM <tabela> [WHERE <condio>] 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
Sintaxe:
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 cdigo do cliente, nome do cliente ,renda do CLIENTE e renda do CLIENTE com acrscimo 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 no aparecer est coluna necessrio criar um alias para a coluna conforme cdigo abaixo.
SELECT
COD_CLI,NOME_CLI,RENDA_CLI,RENDA_CLI*1.37
Banco de Dados
Autor: Nilson A. Borges 39 de 88
Exemplo: /*sero listados todos os registro da tabela CLIENTES onde o campo Cod_Cli for igual a 1 */ SELECT * FROM CLIENTE WHERE COD_CLI = 1
/*sero 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
/*sero 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: No esquea que na clausula where utiliza-se os operadores de comparao: maior, menor, igual, diferente, maior ou igual e menor ou igual.
Banco de Dados
Autor: Nilson A. Borges 40 de 88
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 */
/* seleciona todos os registros da tabela PEDIDO onde o campo Data_Ped estiver entre 10/10/2003 a 02/10/2004 */
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
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 comear com a letra A */ SELECT * FROM CLIENTE WHERE NOME_CLI LIKE A%
/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli contedo */ SELECT * FROM CLIENTE WHERE NOME_CLI NOT LIKE %OLIVEIRA% no 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
significando que somente dados distintos sero apresentados como resultado de uma pesquisa.
Exemplos: /* seleciona todos os valores do campo Cdigo do Cliente, valor do pedido da tabela PEDIDO sem repetio dos cdigos 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 repetio da data do pedido*/ SELECT DISTINCT DATA_PED,VAL_PED FROM PEDIDO
Banco de Dados
Autor: Nilson A. Borges 43 de 88
Sintaxe:
/* 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
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
Definio: A clusula GROUP BY agrupa todas as linhas de retorno de uma pesquisa que possurem o valor de seus campos iguais.
Sintaxe : SELECT (<campo_agrupamento> e/ou <funcao_agrupamento>) FROM <tabela> [WHERE <condio>] 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
/* 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
/* seleciona a somatria dos valores do campo Renda_Cli da tabela Clientes */ SELECT COD_CLI, SUM(RENDA_CLI) AS RENDA CLIENTE FROM CLIENTE
/* seleciona a somatria 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
Exemplos:
/* seleciona a mdia 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
Sintaxe: SELECT MIN(<campo>) FROM <tabela> [WHERE <condio>] SELECT MAX(<campo>) FROM <tabela> [WHERE <condio>]
Exemplos:
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
/* 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 mdia superior a 450 */ SELECT COD_CLI, MIN(RENDA_CLI) AS MINIMO, MAX(RENDA_CLI) AS MXIMO COD_CLI HAVING AVG(RENDA_CLI) > 450 FROM CLIENTE GROUP BY
Banco de Dados
Autor: Nilson A. Borges 50 de 88
Banco de Dados
Autor: Nilson A. Borges 51 de 88
Banco de Dados
Autor: Nilson A. Borges 52 de 88
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 utilizao de alias)
/*Utilizando o exemplo anterior agora queremos listar todos os clientes possui ou no email, para fazer tal consulta necessrio a utilizao 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
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
/* 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
Sintaxe: No existe uma sintaxe fixa, mas existem algumas restries: - deve estar sempre entre parnteses; - no pode ser usada na clusula ORDER BY; - a subquery no pode conter ORDER BY, COMPUTE ou SELECT INTO - a subquery no pode, em hiptese alguma, retornar mais de uma coluna no caso de comparao por valores ou listas; - a subquery deve usar a funo EXISTS se fizer um SELECT *; - no 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 mdia 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
/* 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
/* 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 cdigo abaixo SELECT * FROM V_CLIENTE Banco de Dados
Autor: Nilson A. Borges 58 de 88
Suponha que necessitamos liberar o acesso aos dados da tabela Funcionrio, mas no podemos liberar o acesso aos dados da coluna Salrio (Sal_Func). Para solucionar esta questo, voc poderia criar uma View sobre essa tabela e liberar para o usurio acesso tabela apenas por meio da view:
/* Criar uma view Funcionrio da situao 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 cdigo abaixo SELECT * FROM V_FUNC Outro ponto importante sobre as views: no podemos utilizar a clusula ORDER BY na definio da view. Como uma exceo: quando se utiliza TOP para limitar os registros: -- Isto uma definio vlida 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 cdigo abaixo SELECT * FROM V_FUNC
Banco de Dados
Autor: Nilson A. Borges 59 de 88
Banco de Dados
Autor: Nilson A. Borges 60 de 88
Esta execuo dinmica funcionar da seguinte forma: uma string deve ser montada com a instruo que desejamos executar. Esta string deve possuir uma instruo sintaticamente correta para o SQL Server e, tendo esta string montada, devemos executa-la em tempo de execuo. No nosso exemplo, vamos passar como parmetro de entrada de uma Stored Procedure no nome da tabela que desejamos consultar. Em seguida vamos concatenar o valor do parmetro com uma string e colocar a string completa dentro de uma varivel. Por fim, iremos executar esta instruo com o comando EXECUTE() do SQL Server. O cdigo desta Stored Procedure mostrado abaixo:
/* Esta Procedure vai fazer um Select Dinmico em alguma Tabela */ CREATE PROCEDURE ST_SQL_DINAMICO @NOME_TABELA VARCHAR(50) AS BEGIN
/* Contatenando a instruo com o Nome da Tabela */ SET @INSTR_SQL = "SELECT * FROM " + @NOME_TABELA /* EXECUTANDO A INSTRUO 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
**
Instruo
SQL
desejada
atribuindo
um
valor
ao
parmetro(varivel) **
end Listagem 1. Sintaxe do comando CREATE PROCEDURE. Executando uma procedure e recuperando seu valor de retorno. Para invocar a execuo de um stored procedure, usado a mesma sintaxe simples EXEC NOMEPROCEDURE, porm, a diferena est na necessidade em declararmos uma varivel com o mesmo tipo de dado do parmetro, e especificarmos que ela receber o valor retornado pelo parmetro de sada atravs da funo output.
Banco de Dados
Autor: Nilson A. Borges 63 de 88
Veja na Listagem 2, a sintaxe bsica para esse tipo de execuo: /*Declarao de variveis que receberam o resultado da procedure */ declare @VARIVEL tipo ... /*execuo e atribuio do valor de retorno. */ exec NomeStoredProcedure @VARIVEL output /* Manipulao do resultado. */ PRINT 'O valor : '+@VARIAVEL
Listagem 2. Sintaxe de execuo de um stored procedure e recuperao do valor retornado atravs do uso da funo output. Lembrando que voc pode aplicar todos os recursos de criao e execuo de stored procedure, como por exemplo, as funes: alter procedure, drop procedure, with encryption, etc. Exemplos prticos: Veja aqui, alguns exemplos prticos que mostram como criar stored procedure com parmetros de sada. Nota 01 Voc pode testar esses scripts em qualquer database, porm antes, necessrio criar e inserir dados na tabela de exemplo conforme a Listagem 3.
/*Criao 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
go
/*Inseres 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','JOO 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
Listagem 3. Script SQL para Criao e povoamento da tabela de testes(FUNCIONARIOS). Exemplo 02 - Implementao de um procedure com um parmetro de sada /*Procedure simples para recuperar a soma dos salrios da tabela FUNCIONARIOS */
create procedure sp_BuscaSalario (@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS end
/*Execuo do stored procedure */ /*Declarao de variveis que receberam o resultado do procedure */ declare @SALARIO_TOTAL money /*execuo*/ exec sp_BuscaSalario @SALARIO_TOTAL output /* Manipulao do resultado*/ PRINT 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS
varchar(20)))
Banco de Dados
Autor: Nilson A. Borges 66 de 88
if @SALARIO_TOTAL < 20000 begin print '***SALRIO BAIXO***** ' print 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS
varchar(20))) end else begin print '***SALRIO ALTO***** ' print 'Salrio total R$'+(CAST(@SALARIO_TOTAL AS
varchar(20))) end
Banco de Dados
Autor: Nilson A. Borges 67 de 88
@SOMA money OUTPUT) as begin select @SOMA=sum(SALARIO) from FUNCIONARIOS where DEPARTAMENTO=@DEPTO end /*Execuo do procedure */ /*Varivel de sada */ declare @SALARIO_TOTAL money /*Varivel para passagem de parmetro*/ declare @DEPARTAMENTO int set @DEPARTAMENTO=30 /*execuo*/ exec sp_BuscaSalario_porDepto @DEPARTAMENTO, @SALARIO_TOTAL output PRINT 'Salrio total do departamento '+ cast(@DEPARTAMENTO as varchar)+ ' R$'+(CAST(@SALARIO_TOTAL AS varchar(20)))
Banco de Dados
Autor: Nilson A. Borges 68 de 88
Banco de Dados
Autor: Nilson A. Borges 69 de 88
Erros do Transact-SQL que causam o cancelamento da instruo, e ento continuam na prxima instruo de um mdulo (como em triggers e stored procedures) so tratados de modo diferente dentro de uma funo. Em uma funo, os erros encontrados em instrues Transact-SQL interrompem seu processamento.
Entretanto, se voc necessita de procedimentos que retornam resultados, uma UDF frequentemente a melhor escolha para uma aplicao SQL, pelo simples fato de poder ser chamada a partir de uma instruo SQL.
Banco de Dados
Autor: Nilson A. Borges 70 de 88
As seguintes regras se aplicam quando uma UDF faz chamadas a uma extended stored procedure:
A extended stored procedure no pode retornar dados para o cliente. Se a stored procedure retorna dados, a execuo da funo chamadora falhar.
A extended stored procedure pode se reconectar ao SQL Server; entretanto, a chamada a extended stored procedure deve fazer parte da mesma transao que a funo que a chamou
As funes que chamam extended stored procedure so marcadas como funes nondeterministic. (Veja abaixo no tem determinismo da funo). Banco de Dados
71 de 88
A extended stored procedure executada no contexto de segurana da conta de usurio 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 usurios.
O SQL Server 2000 implementa trs tipos de UDFs assim conhecidas: Scalar valued functions Inline table valued functions Multi-statement table valued functions
Nas chamadas s funes do tipo scalar, deve-se utilizar ou o formato de nome nome_do_usurio.nome_da_funo ou
nome_do_banco_de_dados. nome_do_usurio.nome_da_funo Voc no pode usar o nome da funo isoladamente; essa restrio existe para diferenciar as chamadas s UDFs das chamadas s funes do SQL Server. Ns poderamos chamar a funo que definimos anteriormente da seguinte forma: Para testar a Function
Select dbo.Volume(12.2,10.6,10.0)
Banco de Dados
Autor: Nilson A. Borges 73 de 88
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
AS Renda
3) Escreva uma funo que retorna todos os dados do funcionario cujo cdigo deve ser recebido como parmetro. 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
ShippedDate datetime, Freight ) AS BEGIN INSERT @OrderShipperTab SELECT S.ShipperID, S.CompanyName, Banco de Dados
Autor: Nilson A. Borges 76 de 88
money
A clusula RETURNS no exemplo acima define uma varivel local de retorno do tipo table chamada @OrderShipperTab, e tambm define a estrutura da tabela com a definio das colunas. As instrues no corpo da funo inserem linhas na varivel table local @OrderShipperTab para construir a tabela que ser o resultado retornado pela funo. Note que a instruo RETURN no tem argumento. O valor da varivel local do tipo table definida sera o valor retornado pela funo. A seguir temos um exemplo de como chamar a funo do tipo multistatement table valued:
Opcionalmente, chamadas s funes do tipo table valued podero ser seguida de um alias para a tabela. Pode-se tambm utilizar um alias para se referir s colunas que so retornadas pela funo nas clusulas SELECT e WHERE.
Banco de Dados
Autor: Nilson A. Borges 77 de 88
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 sero executados ANTES dos dados da tabela serem alterados. Normalmente usamos BEFORE nos casos em que precisamos incializar variveis globais, validar regras de negcios, 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
Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE BEGIN RAISERROR('Este pedido no est aberto -
Operao no Executada',16,1) ROLLBACK TRANSACTION RETURN END AFTER indica que os comando PL/SQL do corpo da trigger ser executado APS 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
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
Inserted.Qtd_Vend FROM Produto INNER JOIN inserted ON Produto.Cod_Prod = Inserted.Cod_Prod ELSE BEGIN RAISERROR('Este pedido no est aberto -
Operao no Executada',16,1) ROLLBACK TRANSACTION RETURN END INSTEAD OF indica que a trigger ir ser executada no lugar da instruo que disparou a trigger. Literalmente, a instruo substituda pela trigger. Essa tcnica permite que faamos, por exemplo, alteraes em uma tabela atravs de uma view. usado nos casos em que a view no pode alterar uma tabela por no referenciar uma coluna com a constraint not null. Nesse caso a trigger pode atualizar a coluna que a view no tem acesso.
Banco de Dados
Autor: Nilson A. Borges 80 de 88
tabela',16,1) O evento define qual a instruo DML que aciona a trigger. Informa qual instruo SQL ir disparar a trigger. Pode ser: INSERT UPDATE DELETE
Quando o evento for um UPDATE podemos informar quais colunas que, ao serem alteradas, iro disparar a trigger. O mesmo NO ocorre com INSERT e DELETE porque essas instrues 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
Instruo
(STATEMENT)
O corpo define a ao 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 definio, o tamanho de uma trigger no pode ultrapassar 32K. Como, normalmente, precisamos trabalhar com os valores antes e depois da alterao dos dados, a trigger permite que faamos referencia aos valores antes da alterao (OLD) e aps a alterao (NEW). O nome de uma trigger deve ser nico dentro de um mesmo esquema, e sua sintaxe bsica : 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 [condio]] BLOCO PL/SQL
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 usurio e a que horas ele entrou. Esse exemplo foi retirado diretamente da documentao Oracle. No nosso exemplo fazemos referencia a um evento do sistema ao invs de referenciarmos uma tabela. Outros eventos do sistema so: AFTER SERVERERROR Banco de Dados
Autor: Nilson A. Borges 84 de 88
'DD-MM-YYYY
Eventualmente podemos ter algum tipo de erro em nossa trigger. Para verificar quais so os erros de compilao que temos na trigger basta usar o comando SHOW ERRORS TRIGGER nome_da_trigger. Caso voc queira ver os erros de compilao 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. Ateno: caso a linha onde est o erro se estenda por mais de uma linha, este comando indicar o incio da linha.
Banco de Dados
Autor: Nilson A. Borges 85 de 88
Banco de Dados
Autor: Nilson A. Borges 86 de 88
CONSIDERAES FINAIS
Esta apostila foi confeccionada para os alunos da Instituio Faculdade Anchieta como um material de apoio para a disciplina Banco de Dados onde utilizado o SGDB SQL Server 2005 verso Express. Em caso de dvida mandar e-mail para nilson.dba@gmail.com , no esquea de citar as mensagens de erro.
Banco de Dados
Autor: Nilson A. Borges 87 de 88
REFERNCIAS BIBLIOGRFICAS:
Leo, Renata de Oliveira SQL 2000 SERVER: Estrutura e Implementao de Sistemas de Banco de Dados So Paulo , Editora Erica, 2002 Gunderloy,Mike e Jorden,Joseph L. Dominando o SQL SERVER 2000: A Bblia So Paulo , Editora Makron Books, 2001
Banco de Dados
Autor: Nilson A. Borges 88 de 88