Você está na página 1de 8

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

Views
As views nada mais so do que instrues SELECT j pr-definidas e armazenadas no banco. Este conceito pode parecer simples, e , mas pode-se resolver muitos problemas com as views. Para criar uma view, utilizamos o comando CREATE VIEW. Sua sintaxe: CREATE VIEW <view_name> AS <instruo_SELECT> Exemplo: CREATE VIEW V_TAB1 AS SELECT COD , NOME FROM TABELA1 No exemplo acima, criamos uma view que somente retorna dois campos da tabela base (no caso a TABELA1) COD e NOME. Podemos ento utilizar a view como se fosse uma tabela normal: SELECT COD FROM V_TAB1 WHERE NOME = Mauro Detalhe: no exemplo acima s poderamos utilizar os dois campos da view, COD e NOME. Mesmo que a tabela base (TABELA1) possua mais campos no poderamos nos referir a eles, pois eles no constam na definio da view. A algum poderia pensar: Fcil, coloco um SELECT * FROM TABELA1 na definio da view. Esta prtica, alm de no ser recomendada por motivos de performance, pode gerar um problema: vamos supor que futuramente algum inclua um campo na tabela base (TABELA1). Mesmo com o * na definio da view o novo campo NO retornado. necessrio apagar a view e cri-la de novo. importante tambm lembrar que todos os campos (calculados ou no) referenciados na view devem possuir um nome, que deve ser nico na definio da view. 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_TAB1 AS SELECT TOP 100 COD , NOME FROM TABELA1 ORDER BY NOME Tambm no podemos utilizar as clusulas COMPUTE, COMPUTE BY e INTO dentro de uma view. Uma view tambm pode ser utilizada para incluir dados. No entendeu? Vamos l. Supondo que a TABELA1, utilizada na criao da view V_TAB1, possua somente os dois campos utilizados na view , COD e NOME. Podemos fazer um instruo INSERT normalmente, como se fosse somente uma tabela: INSERT INTO V_TAB1 VALUES(1,VANESSA) Isso nos possibilita fazer uma insero em um view . Como s uma view, podemos fazer uma instruo INSERT na view que colocar valores somente em alguns campos da tabela. Quando utilizarem esta prtica, tomem cuidado com campos calculados e expresses de agregao feitos na definio da view.

Pg. 1

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO As views tambm podem se referenciar a outras tabelas de outros banco de dados de outros servidores SQL Server, ou mesmo de um arquivo do Access ou at uma tabela do Oracle. A estas views damos o nome de particioned views e possuem algumas caractersticas especiais. A partir do SQL Server 2000 tambm podemos criar um ndice para a view, chamada de indexed view, que melhoram significativamente a performance. As views tambm so uma importante ferramenta para simplificar suas instrues SELECT: ao invs de vrias subquerys, podemos encapsular toda um lgica dentro de uma view, tornando assim o cdigo final da instruo bem mais legvel. Por ltimo, as views podem ser utilizadas para evitar o acesso direto tabela. Por exemplo: o usurio X no pode ver o campo SALARIO da tabela FUNCIONARIO. Como fazer isto? Crie uma view sem incluir este campo e d permisso de consulta view ao usurio X sem liberar o acesso fsico tabela, ocultando assim o campo SALARIO. EXEMPLOS: Exemplo 1 - Crie uma View chamada V_CliSemFone que mostra os dados dos clientes que no tem telefone. CREATE VIEW V_CliSemFone AS SELECT * FROM CLIENTE WHERE COD_CLI NOT IN(SELECT COD_CLI FROM FONE) ------------------------------------------------------------SELECT * FROM V_CliSemFone ------------------------------------------------------------Exemplo 2 - Crie uma View chamada V_CliSolteiro que mostre todos os clientes solteiros. CREATE VIEW V_CliSolteiro AS SELECT * FROM CLIENTE WHERE COD_CLI NOT IN(SELECT COD_CLI FROM CONJUGE) ------------------------------------------------------------SELECT * FROM V_CliSolteiro ------------------------------------------------------------Exemplo 3 - Crie uma View chamada V_CliPedFunc que mostra o Codigo e nome dos cliente, o codigo e nome dos funcionrios, o numero, a data e o valor todal dos pedidos. CREATE VIEW V_CliPedFunc AS SELECT CLIENTE.COD_CLI,CLIENTE.NOME_CLI, FUNCIONARIO.COD_FUNC,FUNCIONARIO.NOME_FUNC, PEDIDO.NUM_PED,DATA_PED,VAL_PED FROM FUNCIONARIO INNER JOIN PEDIDO ON FUNCIONARIO.COD_FUNC = PEDIDO.COD_FUNC INNER JOIN CLIENTE ON CLIENTE.COD_CLI = PEDIDO.COD_CLI INNER JOIN ITENS ON ITENS.NUM_PED = PEDIDO.NUM_PED INNER JOIN PRODUTO ON PRODUTO.COD_PROD = ITENS.COD_PROD ------------------------------------------------------------SELECT * FROM V_CliPedFunc -------------------------------------------------------------

Ref.: http://imasters.uol.com.br/artigo/239/sql_server/usando_views/ e Apostila SQL Impacta Md. 2.

Pg. 2

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

Stored Procedures
Stored Procedure, traduzido Procedimento armazenado, uma biblioteca de comandos em SQL para utilizao junto ao banco de dados. Ela armazena tarefas repetitivas e aceita parmetros de entrada para que a tarefa seja efetuada de acordo com a necessidade individual. Uma Stored Procedure pode reduzir o trfego na rede, melhorar a performance de um banco de dados, criar tarefas agendadas, diminuir riscos, criar rotinas de processsamento, etc. Por todas estas e outras funcionalidades que as stored procedures so de extrema importncia para os DBAs e desenvolvedores. H 5 Procedimentos (Procedures) bsicos que podemos criar: Procedimentos Locais - So criados a partir de um banco de dados do prprio usurio; Procedimentos Temporrios - Existem dois tipos de procedimentos temporrios: Locais , que devem comear com # e Globais , que devem comear com ##; Procedimentos de Sistema - Armazenados no banco de dados padro do SQL Server (Master), podemos indentifica-los com as siglas sp, que se origina de stored procedure. Tais procedures executam as tarefas administrativas e podem ser executadas a partir de qualquer banco de dados. Procedimentos Remotos - Podemos usar Queries Distribudas para tais procedures. So utilizadas apenas para compatibilidade. Procedimentos Estendidos - Diferente dos procedimentos j citados, este tipo de procedimento recebe a extenso .dll e so executadas fora do SGBD SQL Server. So identificadas com o prefixo xp.

Quando utilizar procedures Quando temos vrias aplicaes escritas em diferentes linguagens, ou rodam em plataformas diferentes, porm executam a mesma funo. Quando damos prioridade consistncia e segurana.

Os bancos (Ita, Bradesco, Real, etc), por exemplo, em geral, utilizam stored procedures para todas as operaes em comum. Os procedimentos podem assegurar que as operaes sejam registradas de forma correta e segura.

Por que mais seguro? Seguindo a linha de raciocnio dos bancos, utilizando stored procedures outras aplicaes e usurios no conseguiriam nenhum tipo de acesso s tabelas do banco de dados de forma direta. Eles poderiam apenas executar as stored procedures, que rodam aes especficas e determinadas pelos DBAs e desenvolvedores. Criando uma stored Procedure Este um exemplo de uma stored procedure que executa uma consulta utlizando um filtro por descrio, em uma tabela especfica de nosso banco de dados.
Pg. 3

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

USE BancoDados GO CREATE PROCEDURE Busca @CampoBusca VARCHAR (20) AS SELECT Codigo, Descrio FROM NomeTabela WHERE Descricao = @CampoBusca

--- Declarando o nome da procedure --- Declarando varivel (note que utilizamos --- o @ antes do nome da varivel) --- Consulta --- Utilizando varivel como filtro para a --- consulta

Para executar uma procedure basta utiilizar a clusula EXECUTE seguido pelo nome da procedure e na frente o valor a ser utilizado como parmetro. Exemplo: EXECUTE Busca 'iMasters' O que nos retornaria o seguinte resultado:

Para deletar uma procedure necessrio utilizar a clusula DROP PROCEDURE como no exemplo abaixo. DROP PROCEDURE Busca.

EXEMPLOS: ----Faa uma procedure que recebe o cdigo do funcionario e um percentual de aumento salarial como parmetro de entrada. Verifique o salario deste funcionrio e o seu sexo. Se Sexo = 'F' e Salario < 1000 Aplique o aumento salarial

CREATE PROCEDURE P_AumentaSalFunc @Codigo int, @Aumento decimal(5,2) AS DECLARE @Sexo char(01), @Salario Moeda SELECT @Codigo = Cod_Func, @Salario = Sal_Func FROM Funcionarios WHERE Cod_Func = @Codigo IF @Sexo = 'F' AND @Salario < 1000 Begin UPDATE Funcionarios SET Sal_Func = Sal_Func * @Aumento WHERE Cod_Func = @Codigo PRINT 'Aumento Concedido' End PRINT 'Aumento Negado'
Pg. 4

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

-- Faa uma procdure que recebe o cdigo do Funcionario como parametro e um -- percentual de aumento salarial. -- Obtenha o salario e o sexo deste funcionario. -- Se Sexo = 'F' e salario menor do que 1000 -- aplique o aumento para este funcionario -- Se Sexo = 'M' -- diminua o salario deste funcionario em 100.00 CREATE PROCEDURE P_AumentaSal @Codigo int, @Aumento decimal(5,2) AS DECLARE @Salario Moeda, @Sexo Sexo SELECT @Salario = Sal_Func, @Sexo = Sexo_Func FROM Funcionario WHERE Cod_Func= @Codigo IF @Sexo = 'F' AND @Salario < 1000 Begin UPDATE Funcionario SET SAl_Func = Sal_Func * @Aumento WHERE Cod_Func= @Codigo PRINT 'Aumento concedido para a Funcionaria' End ELSE IF @Sexo = 'M' Begin UPDATE Funcionario SET Sal_Func = Sal_Func - 100 WHERE Cod_Func= @Codigo PRINT 'Castigo aplicado para o Funcionario' End

Ref.: http://imasters.uol.c om.br/artigo/7932/bancodedados/dominando_stored_procedures/ e Apostila SQL Impacta Md. 2.

Pg. 5

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

Triggers
Assim como um gatilho dispara um projtil de uma arma para que este possa acertar o seu alvo, da mesma maneira um trigger dispara uma srie de aes para cumprir um objetivo especfico. Muitas pessoas possuem dvidas de como fazer tais disparos de aes em uma base de dados. Em vista desta necessidade, nessa matria veremos o conceito de triggers e como cri-los baseado no Transact-SQL. Um trigger automaticamente executado quando um comando do tipo INSERT, DELETE ou UPDATE executado em uma tabela. A principal aplicao de uma trigger a criao de restries de acesso ao banco de dados, como rotinas de segurana. Em vez de deixarmos o controle da aplicao para a prpria tabela, passamos a executar por meio de triggers, ou gatilhos, esses controles, tornando muito mais seguro o manuseio de nossa base de dados. Entre as vrias utilidades de um trigger, podemos destacar: Criar mecanismos de validao, os quais envolvam pesquisas em mais de uma tabela; Inserir o contedo de uma coluna derivada de outras colunas; Atualizar outras tabelas em funo de incluso ou alterao de dados da tabela que estamos utilizando; Criao de logs, ou registros de incluso e alteraes de usurios.

H outras aplicaes que podemos fazer com triggers, isso depende da necessidade do desenvolvedor ou DBA. Devemos ter em mente dois importantes aspectos de um trigger: Primeiramente que a ao executada pelo trigger o bloco Transact-SQL que criamos e que um trigger pode ser acionado pelos comandos INSERT, DELETE e UPDATE alm de poder ser chamado quando mais de uma ao ocorrer; Limitaes do uso de um trigger Um trigger pode executar comandos contidos em seu corpo ou acionar uma stored procedure e outros triggers para executar determinadas tarefas; Pode-se especificar qualquer comando SET dentro de um trigger. Ele permanecer ativo durante toda a execuo do trigger; No possvel criar um trigger para uma viso. Porm, quando uma viso utilizada, os triggers da tabela que est sendo utilizada so normalmente acionados; Quando um trigger executado os resultados so retornados para a aplicao que o chamou. Para evitar o retorno de resultados, recomenda-se no utilizar comandos SELECT que retornem resultados ou que executem a atribuio de contedo a variveis. O comando TRUNCATE TABLE no consegue ser interceptado por um trigger do tipo DELETE. O comando WRITETEXT no ativa um trigger;

H tambm certos comandos Trasact-SQL que no podem ser utilizados dentro de um trigger como, por exemplo: ALTER DATABASE, ALTER PROCEDURE, CREATE DATABASE, CREATE INDEX, DROP DATABASE, DROP PROCEDURE, entre outros. Criando um trigger

Pg. 6

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO Um trigger pode ser criado com o uso do Transact-SQL CREATE TRIGGER, ou por meio do enterprise manager. Nos dois casos necessria a digitao dos comandos SQL. Exemplo de criao de um trigger: CREATE TRIGGER nome_do_trigger ON { table | view } [ WITH ENCRYPTION ] { { { FOR | AFTER | INSTEAD OF } { [ INSERT ] [ , ] [ UPDATE ] } [ WITH APPEND ] [ NOT FOR REPLICATION ] AS [ { IF UPDATE ( column ) [ { AND | OR } UPDATE ( column ) ] [ ...n ] | IF ( COLUMNS_UPDATED ( ) { bitwise_operator } updated_bitmask ) { comparison_operator } column_bitmask [ ...n ] } ] sql_statement [ ...n ] } } Onde: ON - Indica a tabela ou viso para o qual o trigger est sendo criado; FOR - Deve ser seguido do tipo de comando ou comandos que disparam o trigger; AFTER - Especifica que o trigger disparado apenas quando todas as operaes especificadas no comando de disparo forem executadas com sucesso. Todas as aes contraints devem ter sido bem sucedidas antes de o trigger ser executado. AFTER padro se apenas FOR for especificado.Os triggers do tipo AFTER no pode ser definidos em vises; INSTEAD OFF - Especifica que o trigger executado em vez do comando de disparo desse trigger, ou seja, em vez do comando INSERT, o trigger ser executado. Podem existir triggers INSTEAD OF para cada comando INSERT, UPDATE. Os triggers INSTEAD OF no so permitidos em vises com a opo WITH CHECK OPTION.

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!') GO Para alterar um trigger usamos o comando ALTER TRIGGER nome_do_trigger. Para excluir um trigger utilizamos o comando DROP TRIGGER nome_do_trigger. Lembrando que se a tabela que contm o trigger for eliminada o trigger tambm ser.
Pg. 7

ITB - Instituto Tcnico de Barueri Braslio Flores de Azevedo Leandro Angelo Alberti 1 Semestre 2009 - LECO

EXEMPLOS: EXEMPLO 1 -- Faa um trigger de incluso na tabela funcionario que insere uma linha na -- tabela de Premio a cada vez que um funcionario do sexo feminino for inserido -- na tabela. O valor do premio dever ser de 200.00 ALTER TRIGGER T_IncFunc ON Funcionarios FOR INSERT AS DECLARE @CodFunc int, @Sexo char(1), @CodPremio int SELECT @CodFunc = Cod_Func, @Sexo = Sexo_Func FROM Inserted IF @Sexo = 'F' Begin SELECT @CodPremio = Max(Cod_Premio) FROM Premio SET @CodPremio = @CodPremio + 1 INSERT Premio VALUES(@CodPremio,@CodFunc,getdate(),200.00,'0') End

EXEMPLO 2: -- No database siscom crie a tabela abaixo: CREATE TABLE Hist_Func ( Cod_Func int not null, Sal_Antigo decimal(10,2) not null, Sal_Atual decimal(10,2) not null, Data_Atual smalldatetime not null ) -- Faa um trigger de update na tabela funcionrio que insira um registro na -- tabela Hist_Sal a cada vez que o salrio de um dos funcionrios for alterado. CREATE TRIGGER T_GeraHist ON Funcionarios FOR UPDATE AS DECLARE @SalAntigo decimal(10,2), @SalAtual decimal(10,2), @Codigo int SELECT @Codigo = inserted.Cod_Func, @SalAtual = inserted.Sal_Func, @SalAntigo = deleted.Sal_Func FROM inserted INNER JOIN deleted ON inserted.Cod_Func = deleted.Cod_Func IF @SalAntigo <> @SalAtual INSERT Hist_Func VALUES(@Codigo,@SalAntigo,@SalAtual,getdate())
Ref.: http://imasters.uol.com.br/artigo/8283/sql_server/triggers_em_transact_-_sql/ e Apostila SQL Impacta Md. 2.

Pg. 8

Você também pode gostar