Escolar Documentos
Profissional Documentos
Cultura Documentos
NDICE
1. 2. 3. INTRODUO............................................................................................................................. 4 CONHECENDO O MICROSOFT SQL SERVER 2008.............................................................. 5 PREPARANDO PARA INSTALAR O SQL SERVER 2008 ....................................................... 6 3.1. USANDO O SQL SERVER COM APLICATIVOS CLIENTE/SERVIDOR ..................................................... 8 3.2. DECIDINDO ENTRE COMPONENTES DO SQL SERVER ....................................................................... 9 3.3. FERRAMENTAS DO SQL SERVER 2008 (CATEGORIAS) .................................................................. 9 3.4. REQUISITOS DE HARDWARE DO SQL SERVER 2008 .......................................................... 12 3.4.1. REQUISITOS DE PROCESSADOR ..................................................................................... 12 3.4.2. REQUISITOS DE MEMRIA .............................................................................................. 12 3.4.3. REQUISITOS DE DISCO RGIDO ...................................................................................... 12 3.5. SQL SERVER MANAGEMENT STUDIO ............................................................................... 13 3.6. OS DATABASES DO SQL-SERVER........................................................................................ 15 4. CRIAO DE UM DATABASE................................................................................................ 21 4.1. Criando um Banco de Dados com a utilizao do SQL SERVER Management Studio .............. 21 4.2. Criao de um Banco de Dados atravs de Scripts.................................................................. 23 4.3. CARACTERSTICA DE UM DATABASE ................................................................................ 24 5. CRIAO DE TABELAS .......................................................................................................... 24 5.1. Datatypes do SQL Server........................................................................................................ 25 Nulabilidade ................................................................................................................................. 27 Constraints: Integridade ............................................................................................................... 27 Primary Key(Chave Primria): ..................................................................................................... 27 Foreign Key(Chave Estrangeira): ................................................................................................. 28 AutoNumerao ............................................................................................................................ 29 5.2. Criao de Tabelas no Banco de Dados criado anteriormente com a utilizao de scripts ....... 30 5.3. Alterando a estrutura de uma tabela ....................................................................................... 32 5.4. Criando um Diagrama ........................................................................................................... 33 6. INSERT (INSERE REGISTRO) ................................................................................................ 35
7. UPDATE (ALTERA VALOR DO REGISTRO)............................................................................ 36 8. DELETE (EXCLUSO DE REGISTROS) ................................................................................... 38 9. APRESENTANDO O SISTEMA INFONEW ................................................................................ 39 9.1 OS OBJETIVOS GERAIS DO INFONEW SO: ...................................................................... 39 PARTE 1 MANTER DADOS A RESPEITO DOS CLIENTES DA EMPRESA .................................................. 39 PARTE 2 ANLISE DO CREDITO DO CLIENTE .................................................................................... 40 PARTE 3 MANTER DADOS A RESPEITO DOS PRODUTOS A SEREM VENDIDOS ...................................... 40 PARTE 4 MANTER E GERENCIAR OS PEDIDOS DE COMPRA FEITOS PELOS CLIENTES ........................... 41 PARTE 5 MANTER DADOS A RESPEITO DOS FUNCIONRIOS .............................................................. 41 9.2 DIAGRAMA COM RELACIONAMENTOS DO SISTEMA INFONEW .................................... 42 10. SELECT (CONSULTA) ............................................................................................................... 43 10.1 ORDER BY (ORDEM DE RETORNO) ............................................................................................ 44 10.2 ALIAS (APELIDO) ..................................................................................................................... 45 10.3 WHERE (RESTRIES) .............................................................................................................. 46 10.4 BETWEEN (CONDIO COM UMA FAIXA DE VALORES) .............................................................. 47 10.5 LIKE (COMPARAO COM UMA PARTE DE UMA LITERAL)............................................................ 48
Banco de Dados
Autor: Nilson A. Borges 2 de 101
Banco de Dados
Autor: Nilson A. Borges 3 de 101
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 2008. O comando Transact-SQL uma linguagem estruturada para consultas, utilizada no banco de dados da Microsoft, o SQL Server 2008. 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 101
Datacenter ( *x86, *x64 e *IA64): Compilado no SQL Server 2008 R2 Enterprise, o SQL Server 2008 R2 Datacenter oferece uma plataforma de dados de alto desempenho que possui os mais altos nveis de escalabilidade para grandes cargas de trabalho de aplicativo, virtualizao, consolidao e gerenciamento da infraestrutura de banco de dados de uma organizao, ajudando a dimensionar o ambiente de misso crtica de forma econmica.
Enterprise ( *x86, *x64 e *IA64): O SQL Server 2008 R2 Enterprise oferece uma plataforma de dados abrangente que fornece segurana interna, disponibilidade e escalabilidade, combinado com ofertas de business intelligence, ajudando a habilitar os mais altos nveis de servio para cargas de trabalho de misso crtica.
Banco de Dados
Autor: Nilson A. Borges 6 de 101
SQL Server Express (*x86 e *x64): A plataforma de banco de dados do SQL Server Express tem sua base no SQL Server. Ele tambm substitui
o Microsoft Desktop Engine (MSDE). Por ser integrado ao Visual Studio, o SQL Server Express facilita o desenvolvimento de aplicativos controlados por dados que sejam ricos em recursos, seguros para armazenamento e rpidos na implantao.
* Nota: x86: Windows 32 bits , x64: Windows 64 Bits e IA64: Windows 64 bits Itanium
Banco de Dados
Autor: Nilson A. Borges 7 de 101
Banco de Dados
Autor: Nilson A. Borges 8 de 101
Mecanismo de Banco de Dados: O Mecanismo de Banco de Dados o servio principal para armazenamento, processamento e segurana de dados. O Mecanismo de Banco de Dados fornece acesso controlado e processamento rpido de transaes para atender aos requisitos dos aplicativos de consumo de dados mais exigentes dentro de sua empresa. O Mecanismo de Banco de Dados tambm fornece suporte rico para sustentar alta disponibilidade. Analysis Services-Dados Multidimensionais: O Analysis Services suporta OLAP, permitindo ao usurio projetar, criar e gerenciar estruturas multidimensionais que contenham dados agregados de outras fontes de dados, como bancos de dados relacionais. Analysis Services - Minerao de Dados: O Analysis Services permite a voc projetar, criar, e visualizar modelos de minerao de dados. Estes modelos de minerao podem ser construdos a partir de outras fontes de dados utilizando uma diversidade de algoritmos de minerao de dados padro da indstria. Integration Services : O Integration Services uma plataforma para construir solues para integrao de dados de alto desempenho, inclui tambm pacotes que fornecem processamento de extrao, transformao, e carregamento (ETL) para armazenamento de dados.
Banco de Dados
Autor: Nilson A. Borges 9 de 101
Replicao: A replicao um conjunto de tecnologias para copiar e distribuir dados e objetos de um banco de dados para outro e, em seguida, sincronizar os bancos de dados para manter a consistncia. Ao usar a replicao, possvel distribuir dados para diferentes locais e para usurios remotos e mveis atravs de redes locais e de longa distncia, conexes dial-up, conexes sem fio e a Internet. Reporting Services: O Reporting Services fornece s corporaes a funcionalidade de relatrios online possibilitando criar relatrios que se conectam a contedos de vrias fontes de dados, permite tambm, publicar os relatrios em diversos formatos e alm disso centralizar o gerenciamento de segurana e de assinaturas. SQL Server Service Broker: O Service Broker auxilia os desenvolvedores a construir aplicativos de banco de dados evolutivos e seguros. Esta nova tecnologia do Mecanismo de Banco de Dados fornece uma plataforma de comunicao baseada em mensagens que permite a componentes de aplicativos independentes funcionarem como um todo. O Service Broker inclui infra-estrutura para programao assncrona que pode ser usada em apenas um banco de dados ou apenas uma instncia, e tambm para aplicativos distribudos.
Descrio
O SQL Server Management Studio um ambiente integrado para acessar, configurar, gerenciar, administrar e desenvolver componentes do SQL Server. O Management Studio permite que desenvolvedores e administradores com todos os nveis de conhecimento usem o SQL Server. Internet Explorer 6 SP1 ou uma verso posterior requerido para a instalao do Management Studio.
Banco de Dados
Autor: Nilson A. Borges 10 de 101
SQL Server
O SQL Server Configuration Manager fornece gerenciamento protocolos do cliente e aliases do cliente do SQL Server
O SQL Server Profiler fornece uma interface grfica do usurio para monitorar uma instncia do Mecanismo de Banco de Dados ou do Analysis Services.
O Orientador de Otimizao do Mecanismo de Banco de Dados ajuda a criar conjuntos de ndices, exibies indexadas e parties ideais.
O Business Intelligence Development Studio um IDE para solues do Analysis Services, Reporting Services e do Integration Services. Internet Explorer 6 SP1 ou uma verso posterior requerido para a instalao do BI Development Studio.
Componentes de conectividade
Instala componentes para comunicao entre clientes e servidores, e bibliotecas de rede para DB-Library, ODBC e OLE DB.
Banco de Dados
Autor: Nilson A. Borges 11 de 101
Banco de Dados
Autor: Nilson A. Borges 12 de 101
Recurso
Mecanismo de Banco de Dados e arquivos de dados, 711 MB Replicao e Pesquisa de Texto Completo Analysis Services e arquivos de dados Reporting Services e Gerenciador de Relatrios Integration Services 345 MB 304 MB 591 MB
Componentes do cliente (exceto os Manuais Online e as 1.823 MB ferramentas do Integration Services) Manuais Online do SQL Server 157 MB
Banco de Dados
Autor: Nilson A. Borges 13 de 101
Com o SQL SERVER Management Studio, voc executa a maioria das tarefas de administrao de banco de dados do SQL SERVER 2008. Voc deve conhecer bem essa ferramenta para gerenciar adequadamente os sistemas do SQL SERVER 2008 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. 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.
Banco de Dados
Autor: Nilson A. Borges 14 de 101
Banco de Dados
Autor: Nilson A. Borges 15 de 101
SAU02
SAU05
System tables
System tables
Vejamos a funo de cada um dos bancos de sistema. MASTER Controla os bancos de dados de usurios e a operao do SQL Server, por isso os dados armazenados em suas tabelas so crticos 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) espao alocado a cada database; f) locks ativos; g) databases disponveis e dispositivos de dump; h) procedimentos de sistema, que so primariamente utilizados para administrao.
Banco de Dados
Autor: Nilson A. Borges 16 de 101
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);
Banco de Dados
Autor: Nilson A. Borges 17 de 101
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):
1. sysalternates - possui uma linha para cada usurio mapeado para um banco de dados de usurio; 2. syscolumns - possui uma linha para cada coluna em uma tabela ou view, e para cada parmetro em uma stored procedure; 3. syscomments - possui uma ou mais linhas para cada view, regra (rule), padro (default), trigger e stored procedure que contenha uma declarao de definio; 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 informaes de textos ou imagens; 6. syskeys - uma linha para cada chave estrangeira (foreign), primria (primary) ou comum (common); 7. syslogs - armazena o transaction log; 8. sysobjects - uma linha para cada tabela (table), viso (view), stored procedure, regra (rule), trigger, padro (default), log e objeto temporrio (somente tempdb);
Banco de Dados
Autor: Nilson A. Borges 18 de 101
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 19 de 101
f) sysservermessages
mensagens
sobre
as
operaes
relacionadas ao servidor.
Banco de Dados
Autor: Nilson A. Borges 20 de 101
4. 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.
4.1. Criando um Banco de Dados com a utilizao do SQL SERVER Management Studio
Banco de Dados
Autor: Nilson A. Borges 21 de 101
Abaixo esto as informaes das clausulas do comando de criao de um Database: 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 22 de 101
Banco de Dados
Autor: Nilson A. Borges 23 de 101
5. 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 2008 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 24 de 101
Money (8 bytes) quando a quantidade de dinheiro muito (ex.: loteria), e smallmoney (4 bytes) quando a quantidade de dinheiro pequena. Datetime e SmallDatetime:quando o campo for do tipo data ou hora. Datetime (8 bytes) utilizado no intervalo de 01/01/1753 a 31/12/9999 Smalltime (4 bytes) utilizado no intervalo de 01/01/1900 a 06/06/2079 Bit :determina se o valor verdadeiro, falso ou nulo.
Banco de Dados
Autor: Nilson A. Borges 25 de 101
TIPOS NUMRICOS NOME BIGINT INT SMALLINT TINYINT DECIMAL(C, D) NUMERIC(C, D) MONEY SMALLMONEY FLOAT(D) REAL TAMANHO (BYTES) 8 4 2 1 VARIVEL MENOR VALOR -263 -2 -2
31 15
ARMAZENA INTEIRO INTEIRO INTEIRO INTEIRO DECIMAL EXATO, ONDE C INDICA NMERO DE POSIES E D O NMERO DE CASAS DECIMAIS DECIMAL EXATO, ONDE C INDICA NMERO DE POSIES E D O NMERO DE CASAS DECIMAIS MONETRIO - EQUIVALE A UM DECIMAL COM 8 CASAS DECIMAIS MONETRIO - EQUIVALE A UM DECIMAL COM 4 CASAS DECIMAIS PONTO FLUTUANTE, ONDE D INDICA O NMERO MXIMO DE CASAS DECIMAIS, ENTRE 0 E 53 PONTO FLUTUANTE - EQUIVALENTE AO FLOAT(24)
-1 -1
0 -1038
255 1038 - 1
VARIVEL 8 4 4 OU 8 4
TIPOS TEXTO NOME CHAR(N) TABELA ASCII LIMITE (CARACTERES) 8000 TAMANHO (CARACTERES) EXATAMENTE N ARMAZENA CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO CARACTERES, ONDE N INDICA O TAMANHO DO CAMPO CARACTERES CARACTERES
VARCHAR(N)
ASCII
8000
AT N
NCHAR(N)
UNICODE
4000
EXATAMENTE N
4000 231 - 1 2
31
-1
NOME
DATETIME
MENOR VALOR
1753-01-01 00:00:00.000
PRECISO
3.33 ms 1 MINUTO, SENDO QUE AT 29.998ms ARREDONDA PARA MENOS E ACIMA DISSO PARA O PROXIMO MINUTO.
ARMAZENA
DATA/HORA
SMALLDATETIME
1900-01-01 00:00:00
2079-06-06 23:59:00
DATA/HORA
Banco de Dados
Autor: Nilson A. Borges 26 de 101
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)
Constraints: Integridade
Primary Key(Chave Primria):
Fazendo parte das regras de modelagem de dados relacional, uma chave primria uma regra que deve sempre ser colocada em uma coluna ou um conjunto de colunas de uma tabela, para que o sistema no aceite dados repetitivos nesses campos, tornando-se possvel a identificao da unicidade de cada registro de uma tabela. . Exemplo: Constraint PK_Cliente Primary Key (Cd_Cli)
Detalhes sobre o uso das Constraints Primary Key(PK) Em uma tabela possvel ter apenas uma constraint primary key A constraint primary key pode ser composta de mais de uma coluna, inclusive de datatypes diferentes As constraints primary key no aceitam valores repetidos, e para manter a unicidade dos dados, O SQL SERVER 2008 cria, nessas colunas, ndices nicos. As colunas que fazem parte da constraint primary key no podem receber valores nulos.
Banco de Dados
Autor: Nilson A. Borges 27 de 101
Exemplo: Constraint FK_NotaFiscal Foreign Key(Cd_Cli) References Cliente(Cod_Cli) On delete cascade Detalhes sobre o uso das Constraints Foreign Key(FK) Em uma tabela possvel ter vrias uma constraint foreign key A constraint foreign key pode ser composta de mais de uma coluna, inclusive de datatypes diferentes Se a chave primria da referida chave estrangeira for composta, a chave estrangeira tambm deve ser composta das mesmas colunas, na mesma sequncia de criao. As constraints foreign key aceitam valores repetidos. O SQL SERVER 2008 no cria ndice automaticamente nas colunas que formam chave estrangeira As colunas que fazem parte da constraint foreign key podem receber valores nulos. As constraints foreign key podem referenciar apenas tabelas do mesmo Database A instruo on delete cascade permite a excluso do dado se o mesmo estiver relacionado em outra tabela, excluir o registro na tabela realcionada.
Banco de Dados
Autor: Nilson A. Borges 28 de 101
Para verificar se a tabela foi criado corretamente Select * from email Ou Comando para verificar a estruturas das tabelas Sp_help email
Banco de Dados
Autor: Nilson A. Borges 29 de 101
5.2. Criao de Tabelas no Banco de Dados criado anteriormente com a utilizao 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) ) 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) On delete cascade
)
Banco de Dados
Autor: Nilson A. Borges 30 de 101
int int
identity
varchar(50) decimal(8,2)
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) On delete cascade , Constraint FK_Itens2Nota Foreign Key(Cod_Prod) References Produto(Cod_Prod) On delete cascade
)
Banco de Dados
Autor: Nilson A. Borges 31 de 101
Alter table Email Add constraint FK_Email Foreign Key(Cod_Cli) References cliente(Cod_Cli)
Para alterar um datatype de campo em uma tabela Alter table Cliente Alter column Sexo_cli varchar(10) null
Para retirar um campo em uma tabela Alter table Cliente Drop column Sexo_cli
Banco de Dados
Autor: Nilson A. Borges 32 de 101
Banco de Dados
Autor: Nilson A. Borges 33 de 101
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 34 de 101
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(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 INSERT
os
valores
na
tabela
NOTAFISCAL*/ INTO WEP2525, 2004/08/12,250.89) Ou INSERT INTO NOTAFISCAL (Cod_Cli, Serie_Nota, Emissao_Nota, Vtot_Nota) VALUES (1, WEP2525, 2004/08/12,250.89) Banco de Dados
Autor: Nilson A. Borges 35 de 101
/* 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 UPDATE NOTAFISCAL SET Vtot_Nota = Vtot_Nota*1.12 WHERE Emissao_nota < 2004/08/20
Banco de Dados
Autor: Nilson A. Borges 36 de 101
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 37 de 101
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 3) Excluir todos os clientes onde moram no Estado de Minas Gerais.
Banco de Dados
Autor: Nilson A. Borges 38 de 101
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 39 de 101
Banco de Dados
Autor: Nilson A. Borges 40 de 101
Banco de Dados
Autor: Nilson A. Borges 41 de 101
Banco de Dados
Autor: Nilson A. Borges 42 de 101
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 FUNCIONARIO COD_PROD, NOME_PROD, VAL_UNITPROD FROM
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 43 de 101
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 44 de 101
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 45 de 101
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 46 de 101
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 05/10/2003 a 02/10/2004 */ SELECT * FROM PEDIDO WHERE DATA_PED BETWEEN '2003/10/05' 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 47 de 101
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 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 no possuir o sobrenome OLIVEIRA dentro do seu contedo */ SELECT * FROM CLIENTE WHERE NOME_CLI NOT LIKE %OLIVEIRA%
/* seleciona todos os registros da tabela CLIENTE onde o campo Nome_Cli possui a primeira letra entre A ou E ou Z */ SELECT * FROM CLIENTE WHERE NOME_CLI LIKE [A,E,Z]%
/* 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 48 de 101
significando que somente dados distintos sero apresentados como resultado de uma pesquisa.
Sintaxe:
SELECT
DISTINCT
<campo>
<condio>]
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 49 de 101
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/12/2008 a 03/08/2010 */ SELECT COUNT(*)AS QUANTIDADE PEDIDOS FROM PEDIDO WHERE 2010/08/03 DATA_PED BETWEEN 2008/12/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 50 de 101
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 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 51 de 101
/* seleciona a somatria dos valores do campo Renda_Cli da tabela Clientes */ SELECT COD_CLI, SUM(RENDA_CLI) AS RENDA CLIENTE FROM CLIENTE GROUP BY COD_CLI
/* 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 52 de 101
Exemplos:
/* seleciona a mdia 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 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 53 de 101
Sintaxe: SELECT MIN(<campo>) FROM <tabela> [WHERE <condio>] SELECT MAX(<campo>) FROM <tabela> [WHERE <condio>]
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 54 de 101
/* 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 HAVING AVG(RENDA_CLI) > 450 COD_CLI, MIN(RENDA_CLI) AS MINIMO, MAX(RENDA_CLI) AS MXIMO FROM CLIENTE GROUP BY
Banco de Dados
Autor: Nilson A. Borges 55 de 101
/* 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 56 de 101
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 57 de 101
/* 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 e foi atendido pelo funcionrio 6 */ SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM PEDIDO WHERE COD_FUNC=6)
/* seleciona todos os registros da tabela cliente onde exibe os dados dos clientes que so casados e que possui email */ SELECT * FROM CLIENTE WHERE COD_CLI IN (SELECT COD_CLI FROM CONJUGE WHERE COD_CLI IN (SELECT COD_CLI FROM EMAIL))
/* seleciona todos os registros da tabela cliente onde exibe os dados dos clientes que so solteiros, que no possui email e no possui telefone e cliente do sexo Feminino */ SELECT * FROM CLIENTE WHERE COD_CLI NOT IN (SELECT COD_CLI FROM CONJUGE WHERE COD_CLI NOT IN (SELECT COD_CLI FROM EMAIL WHERE COD_CLI NOT IN (SELECT COD_CLI FROM FONE))) AND SEXO_CLI=F
Alguns casos podem ser resolvidos tanto por SUBQUERIES como por JOINS, outros apenas por SUBQUERIES.
Banco de Dados
Autor: Nilson A. Borges 58 de 101
Banco de Dados
Autor: Nilson A. Borges 59 de 101
Este simples, o mais entendvel e o mais comum. Esta consulta retornar todos os registros da tabela esquerda (tabela A) que tm correspondncia com a tabela direita (tabela B). Podemos escrever este JOIN da seguinte forma: Exemplos: SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE INNER JOIN EMAIL ON CLIENTE.COD_CLI =EMAIL.COD_CLI
Banco de Dados
Autor: Nilson A. Borges 60 de 101
LEFT JOIN
Esta consulta retorna todos os registros da tabela esquerda (tabela A) e as correspondncias que existirem com a tabela direita (tabela B). O cdigo ficar da seguinte forma: SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE LEFT JOIN EMAIL ON CLIENTE.COD_CLI =EMAIL.COD_CLI
Banco de Dados
Autor: Nilson A. Borges 61 de 101
Esta consulta retornar todos os registros da tabela direita (tabela B) e as correspondncias que existirem com a tabela esquerda (tabela A). O cdigo ficar da seguinte forma: SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE RIGHT JOIN EMAIL ON CLIENTE.COD_CLI =EMAIL.COD_CLI
Este JOIN tambm conhecido como FULL OUTER JOIN ou FULL JOIN. Esta consulta retornar todos os registros das duas tabelas e juntando tambm os registros correspondentes entres as duas tabelas. O cdigo ficar da seguinte forma: SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE CROSS JOIN EMAIL Banco de Dados
Autor: Nilson A. Borges 62 de 101
/*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 /*Utilizando o exemplo anterior agora queremos fazer todas as combinaes possveis de cliente com email, para fazer tal consulta necessrio a utilizao do comando CROSS JOIN */ SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, EMAIL.EMAIL_CLI FROM CLIENTE CROSS JOIN EMAIL
Banco de Dados
Autor: Nilson A. Borges 63 de 101
NOME_CID da tabela CIDADE, NOME_EST da tabela ESTADO */ 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 INNER JOIN ESTADO ON ESTADO.SIGLA_EST = CIDADE.SIGLA_EST 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 INNER JOIN ESTADO ES ON ES.SIGLA_EST = CI.SIGLA_EST
Banco de Dados
Autor: Nilson A. Borges 64 de 101
Uma view no pode ter um select com order by sem a clausula Top. Uma view no recebe parmetros de entrada. Para criar uma view, utilizamos o comando CREATE VIEW. Sua sintaxe: Sintaxe: CREATE VIEW <view_name> AS <instruo_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 cdigo abaixo SELECT * FROM V_CLIENTE Banco de Dados
Autor: Nilson A. Borges 65 de 101
/* 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 66 de 101
Banco de Dados
Autor: Nilson A. Borges 68 de 101
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).
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. Banco de Dados
69 de 101
Banco de Dados
Autor: Nilson A. Borges 70 de 101
Exemplo 2 :
Funo onde calcula o fatorial de um nmero inteiro qualquer. CREATE FUNCTION F_CalcFact ( @N int ) RETURNS float AS BEGIN DECLARE @R float SET @R = 1 DECLARE @I int SET @I = 1 WHILE @I <= @N BEGIN SET @R = @R * @I SET @I = @I + 1 END RETURN @R END
Para funes do tipo inline table valued, a cludula RETURNS seguida da palavra TABLE sem uma lista de colunas. As funes do tipo inline table valued retornam valores apresentados como se extrados de tabelas e so definidas com uma nica instruo SELECT em sua construo. As colunas, incluindo os tipos de dados retornados pela funo, so derivados da lista da instruo SELECT que define a funo.
Banco de Dados
Autor: Nilson A. Borges 72 de 101
Para testar SELECT * FROM F_Funcionario(11) 2) Escreva uma funo que retorna todos os dados do funcionrio. CREATE FUNCTION F_Funcionario( ) RETURNS TABLE AS RETURN(SELECT * FROM Funcionario) Para testar SELECT * FROM F_Funcionario( ) 3) Escreva uma funo que recebe o cdigo do cliente como parmetro e retorna a Codigo do cliente e a renda familiar , incluindo na sua renda o salrio do seu conjuge se ele for casado.*/ CREATE FUNCTION F_RendaTodosCliConj ( @COD_CLI RETURNS TABLE AS RETURN (SELECT Cliente.Cod_Cli, Cliente.Renda_Cli + Conjuge.Renda_Conj AS Renda FROM Cliente LEFT JOIN Conjuge ON Cliente.Cod_Cli = Conjuge.Cod_Cli WHERE CLIENTE.Cod_Cli =@COD_CLI) INT )
Banco de Dados
Autor: Nilson A. Borges 73 de 101
Banco de Dados
Autor: Nilson A. Borges 74 de 101
Banco de Dados
Autor: Nilson A. Borges 75 de 101
No exemplo estamos gerando uma tabela de juros com 240 perodos com juros de 11% 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 76 de 101
/* Esta Procedure vai fazer um Select Dinmico em alguma Tabela */ CREATE PROCEDURE ST_SQL_DINAMICO @NOME_TABELA VARCHAR(50) AS BEGIN /* Declarando a Varivel que conter a instruo */ DECLARE @INSTR_SQL VARCHAR(500)
Banco de Dados
Autor: Nilson A. Borges 77 de 101
Para executar esta Stored Procedure basta indicar qual o nome da tabela: EXEC ST_SQL_DINAMICO "Infonew.dbo.Cliente" Muito bem, vimos como funciona a execuo dinmica de instrues do SQL Server. Mas quais so os pontos negativos da execuo dinmica? Em exemplos como o citado acima no h grandes problemas. O SQL Server s vai ter um pouco de trabalho para fazer o parser da instruo em tempo de execuo, compilar e colocar o plano de execuo 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 informaes sobre a sp_executesql procurem na documentao oficial do SQL Server, o Books Online, que contm uma boa descrio de seus parmetros e alguns exemplos de uso. Outro inconveniente da execuo dinmica o retorno de dados. Se desejarmos fazer alguma manipulao nos dados retornados por uma execuo dinmica, devemos fazer uso de uma tabela temporria que ser preenchida com o retorno da execuo. Esta tabela temporria vai armazenar o ltimo resultado da(s) instruo(es) dinmica(s) e deve conter a mesma quantidade e tipos de dados das colunas que o resultado.
Banco de Dados
Autor: Nilson A. Borges 78 de 101
Sintaxe
CREATE { PROC | PROCEDURE } [schema_name.] procedure_name [ ; number ] [ { @parameter [ type_schema_name. ] data_type } [ VARYING ] [ = default ] [ OUT | OUTPUT ] [READONLY] ] [ ,...n ] [ WITH <procedure_option> [ ,...n ] ] [ FOR REPLICATION ] AS { <sql_statement> [;][ ...n ] | <method_specifier> } [;] <procedure_option> ::= [ ENCRYPTION ] [ RECOMPILE ] [ EXECUTE AS Clause ] <sql_statement> ::= { [ BEGIN ] statements [ END ] } <method_specifier> ::= EXTERNAL NAME assembly_name.class_name.method_name
Argumentos
schema_name o nome do esquema ao qual o procedimento pertence. procedure_name o nome do novo procedimento armazenado. Os nomes de procedimento devem estar de acordo com as regras para identificadores e devem ser exclusivos no esquema. Recomendamos fortemente que voc no use o prefixo sp_ no nome de procedimento. Este prefixo usado pelo SQL Server para designar procedimentos armazenados de sistema.
Banco de Dados
Autor: Nilson A. Borges 79 de 101
Banco de Dados
Autor: Nilson A. Borges 80 de 101
Banco de Dados
Autor: Nilson A. Borges 81 de 101
Tipos de dados de sistema do SQL Server. O esquema padro do usurio atual no banco de dados atual. O esquema dbo no banco de dados atual.
Para procedimentos armazenados numerados, o tipo de dados no pode ser xml ou um tipo de dados CLR definido pelo usurio. VARYING Especifica o conjunto de resultados com suporte como um parmetro de sada. Este parmetro construdo dinamicamente pelo procedimento armazenado e seu contedo pode variar. Aplica-se somente a parmetros cursor. DEFAULT um valor padro para o parmetro. Se um valor default for definido, o procedimento poder ser executado sem especificar um valor para aquele parmetro. O padro deve ser uma constante ou pode ser NULL. Se o procedimento usar o parmetro com a palavra-chave LIKE, poder incluir os seguintes caracteres curinga: % _ [] and [^]. OUTPUT Indica que o parmetro um parmetro de sada. O valor desta opo pode ser retornado para a instruo EXECUTE de chamada. Use parmetros OUTPUT para retornar valores ao chamador do procedimento. Parmetros text, ntexte image no podem ser usados como parmetros OUTPUT, a menos que o procedimento seja CLR. Um parmetro de sada que usa a palavra-chave OUTPUT pode ser um espao reservado de cursor, a menos que o procedimento seja CLR. Um tipo de tabela definido pelo usurio no pode ser especificado como um parmetro OUTPUT de um procedimento armazenado. Banco de Dados
Autor: Nilson A. Borges 82 de 101
Banco de Dados
Autor: Nilson A. Borges 83 de 101
procedimentos armazenados CLR. A opo RECOMPILE ignorada para procedimentos criados com FOR REPLICATION.Um procedimento FOR REPLICATION ter um tipo de objeto RF em sys.objects e sys.procedures. Procedimentos armazenados temporrios O Mecanismo de Banco de Dados oferece suporte a dois tipos de procedimentos temporrios: local e global. Um procedimento temporrio local visvel somente para a conexo que o criou. Um procedimento temporrio global est disponvel para todas as conexes. Os procedimentos temporrios locais so descartados automaticamente ao trmino da sesso atual. Os procedimentos temporrios globais so descartados ao trmino da ltima sesso que usa o procedimento. Para obter mais informaes, consulte Criando procedimentos armazenados (Mecanismos de Banco de Dados). Procedimentos armazenados executados automaticamente Um ou mais procedimentos armazenados podem ser executados automaticamente quando o SQL Server iniciado. Os procedimentos armazenados devem ser criados pelo administrador de sistema no banco de dados mestre e executados na funo de servidor fixa sysadmin como um processo de segundo plano. Banco de Dados
Autor: Nilson A. Borges 84 de 101
DECLARE @RESPOSTA Decimal(6,2) EXEC SP_CONTA 10,7, @RESPOSTA Output PRINT @RESPOSTA
Banco de Dados
Autor: Nilson A. Borges 85 de 101
DECLARE @RESPOSTA decimal(10,2) EXEC SP_CONTA2 7.5,5,2, @RESPOSTA Output PRINT @RESPOSTA
Exemplo 3: Escreva uma procedure onde entre com a nota p1 e p2 e mostre a mdia escolar CREATE PROCEDURE SP_MEDIA @NUM_1 decimal(3,1), @NUM_2 decimal(3,1), @RESPOSTA decimal(3,1) Output AS Set @RESPOSTA = (@NUM_1 + @NUM_2*2)/3
Para Testar
DECLARE @RESPOSTA decimal(3,1) EXEC SP_MEDIA 7.5,6, @RESPOSTA Output PRINT @RESPOSTA
Banco de Dados
Autor: Nilson A. Borges 86 de 101
Exemplo 4: Escreva uma procedure se a soma dos salrios dos funcionrios for maior do que 5000 aplique um aumento de 15,23% para todos funcionrios. Caso contrrio 10,45%. USE INFONEW GO CREATE PROCEDURE SP_FUNCIONARIO As DECLARE @PERCENT DECIMAL(10,2) IF (SELECT sum(Sal_Func) FROM FUNCIONARIO)>=5000 SET @PERCENT = 1.1523 ELSE SET @PERCENT = 1.1045 UPDATE FUNCIONARIO SET SAL_FUNC = SAL_FUNC * @PERCENT
Para Testar
Banco de Dados
Autor: Nilson A. Borges 87 de 101
Banco de Dados
Autor: Nilson A. Borges 88 de 101
EXEC SP_PRODUTO 1,1.25 Select * from PRODUTO (Verificar o novo valor unitrio)
Banco de Dados
Autor: Nilson A. Borges 89 de 101
EXEC SP_CLIENTE F,1.25 SELECT * FROM Cliente WHERE Sexo_Cli = 'f' onde o sexo igual a F) (Verificar a nova renda dos cliente
Banco de Dados
Autor: Nilson A. Borges 90 de 101
Banco de Dados
Autor: Nilson A. Borges 91 de 101
Banco de Dados
Autor: Nilson A. Borges 92 de 101
Exemplo prtico de um trigger Neste exemplo imagine que possumos uma tabela onde ficam armazenados artigos. A cada alterao feita na tabela imprimir uma mensagem na tela 'Artigo alterado com sucesso!'. CREATE TRIGGER TRG_Artigos ON Artigos FOR INSERT, UPDATE AS PRINT('Artigo alterado com sucesso!')
Para
alterar
um
trigger
usamos
comando
ALTER
TRIGGER
nome_do_trigger. Lembrando que se a tabela que contm o trigger for eliminada o trigger tambm ser.
Banco de Dados
Autor: Nilson A. Borges 93 de 101
UPDATE ESTADO SET NOME_EST=COLORADO WHERE SIGLA_EST= CL 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.
Banco de Dados
Autor: Nilson A. Borges 94 de 101
pedido
no
est
aberto
Operao no Executada',16,1)
Verificar qual o nmero do novo pedido select * from pedido WHERE data_ped = '12/03/2009'
Inserir um novo itens no pedido consultado anteriormente no caso de nosso exemplo o pedido de nmero 5125 insert into itens values(5125,1,25,2500)
Verifique que a quantidade de produto em estoque abaixou em 25 . SELECT * FROM PRODUTO WHERE COD_PROD = 1
Banco de Dados
Autor: Nilson A. Borges 96 de 101
E depois a tabela cadastro Create table Cadastro ( Codigo int, Nome varchar(40) )
Abaixo esta a trigger: CREATE TRIGGER TriggerName ON Cadastro FOR INSERT, UPDATE, DELETE AS BEGIN SET NOCOUNT ON DECLARE @ExecStr varchar(50), @Qry nvarchar(255) CREATE TABLE #inputbuffer ( EventType nvarchar(30), Parameters int, EventInfo nvarchar(255) ) SET @ExecStr = 'DBCC INPUTBUFFER(' + STR(@@SPID) + ')' INSERT INTO #inputbuffer EXEC (@ExecStr) SET @Qry = (SELECT EventInfo FROM #inputbuffer) INSERT INTO Comandos_usuarios SELECT USER AS UserName, SYSTEM_USER as LoginName, CURRENT_TIMESTAMP AS CurrentTime, @Qry END Banco de Dados
Autor: Nilson A. Borges 97 de 101
Inserir dados na tabela cadastro --Insere uma linha insert cadastro values(1,'Fernando Garcia') Alterar dados na tabela cadastro --Atualiza o cidog de 1 para 2 update Cadastro set codigo = 2 where nome like 'Fernando Garcia' Excluir dados na tabela cadastro --Exclui a linha com o codigo atualizado Delete from cadastro where codigo = 2 Verificar depois das operaes a quantidade de registros na tabela comandos_usuarios SELECT * FROM COMANDOS_USUARIOS
Banco de Dados
Autor: Nilson A. Borges 98 de 101
Para testar DROP TABLE ESTADO DROP TABLE EMAIL DROP TABLE FONE
Banco de Dados
Autor: Nilson A. Borges 99 de 101
CONSIDERAES FINAIS
Esta apostila foi confeccionada para os alunos da Instituio de Ensino Superior Faculdade Anchieta como um material de apoio para a disciplina Banco de Dados onde utilizado o SGDB SQL Server 2008 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 101 100 de
REFERNCIAS BIBLIOGRFICAS:
Leo, Renata de Oliveira SQL 2000 SERVER: Estrutura e Implementao de Sistemas de Banco de Dados So Paulo , Editora Erica, 2002 Ritter, Mauricio Microsoft SQL SERVER 2008, Fundamentos de Bancos de dados Passo a Passo
Banco de Dados
Autor: Nilson A. Borges 101 101 de