Banco de Dados - Aula 13 - 25 de Outubro

Propaganda
SISTEMAS DE INFORMAÇÃO
Sistemas de Bancos de Dados
2º Semestre – 2010
Pedro Antonio Galvão Junior
E-mail: [email protected] Fone: 9531 - 7555
[email protected]
Versão 1.10.10 – Out/2010.
Comandos Transact SQL (T-SQL)
Stored Procedure(Procedimentos Armazenados)
Stored Procedure
• Stored Procedure é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica
armazenado no Banco de Dados e pode ser chamado a qualquer momento tanto pelo SGBD (sistema
Gerenciador de Banco de Dados) quanto por um sistema que faz interface com o mesmo.
• A utilização de Stored Procedures é uma técnica eficiente de executarmos operações reetitivas. Ao
invés de digitar os comandos cada vez que determinada operação necessite ser executada, criamos
um Stored Procedure e o chamamos. Em um Stored Procedure também podemos ter estruturas de
controle e decisão, típicas das linguagens de programação. Em termos de desenvolvimento de
aplicações, também temos vantagnes com a utilização de Stored Procedures.
• A diferença entre a Stored Procedure e a Function, esta relacionada a obrigatoriedade que a
function tem em retornar valores.
Conhecendo os Tipos de
Stored Procedure
1. System: Localizada no Banco Master, criada pelo próprio SQL Server;
2. Local: Criada pelo próprio usuário, localizada dentro do banco de dados definido pelo
usuário;
3. Temporária Local: Criada temporáriamente pelo usuário, seu tempo de vida e utilização
esta relacionado com a sessão que o usuário esta trabalhando;
4. Temporário Global: Criada temporáriamente pelo usuário, seu tempo de vida e
utilização esta relacionado com a conexão que o usuário esta trabalhando;
5. Remota: Executada em outra máquina;
6. Extendida: Localizada fora do banco de dados, possuim uma código fonte(linguagem),
capaz de executar comando para retornar informações de outras fontes de dados;
Stored Procedure
• Nomenclatura e definição:
Banco de Dados
Caracter Inicial
Tipo
Master
SP
Sistema
Definido pelo
Usuário
SP ou P
Local
Definido pelo
Usuário
#
Temporária Local
Definido pelo
Usuário
##
Temporário Global
Definido pelo
Usuário
SP ou P
Remota
Master
XP
Extendida(Extended)
Trabalhando com Stored Procedure
• CREATE PROCEDURE nome_do_stored_procedure
[
{@parametro tipo_de_dados_parametro}[=valor_default] [output]
]
[,...n]
AS
comando1,
comando2,
comando3,
...,
comando2
GO
Trabalhando com Stored Procedure
• ALTER PROCEDURE nome_do_stored_procedure
[
{@parametro tipo_de_dados_parametro}[=valor_default] [output]
]
[,...n]
AS
comando1,
comando2,
comando3,
...,
comando2
GO
Trabalhando com Stored Procedure
• Excluíndo a Stored Procedure:
– Drop Procedure NomedaSuaProcedure;
• Executando a Stored Procedure:
– Execute NomedaSuaProcedure;
– Exec NomedaSuaProcedure;
– SP_ExecuteSQL N’NomedaSuaProcedure.
• Recompilar as alterações na Stored Procedure:
– SP_RECOMPILE NomedaSuaProcedure;
PRÁTICA - I
Comandos Transact SQL (T-SQL)
Trigger(Gatilho)
Trigger
•
O comando CREATE TRIGGER cria um gatilho. O gatilho fica associado à tabela
especificada e executa a função especificada nome_da_função quando ocorrem
determinados eventos. O gatilho pode ser especificado para disparar antes de tentar
realizar a operação na linha (antes das restrições serem verificadas e o comando
INSERT, UPDATE ou DELETE ser tentado), ou após a operação estar completa (após as
restrições serem verificadas e o comando INSERT, UPDATE ou DELETE ter completado).
•
Se o gatilho for disparado antes do evento, o gatilho pode fazer com que a operação
não seja realizada para a linha corrente, ou pode modificar a linha sendo inserida (para
as operações de INSERT e UPDATE somente). Se o gatilho for disparado após o evento,
todas as mudanças, incluindo a última inserção, atualização ou exclusão, estarão
"visíveis" para o gatilho.
•
Um gatilho que está marcado FOR EACH ROW é chamado uma vez para cada linha que
a operação modifica. Por exemplo, um comando DELETE afetando 10 linhas faz com
que todos os gatilhos ON DELETE da relação de destino sejam chamados 10 vezes, uma
vez para cada linha excluída.
Trigger
•
Diferentemente, um gatilho que está marcado FOR EACH STATEMENT somente
executa uma vez para uma determinada operação, não importando quantas linhas
sejam modificadas; em particular, uma operação que não modifica nenhuma linha
ainda assim resulta na execução de todos os gatilhos FOR EACH STATEMENT aplicáveis.
•
Se existirem vários gatilhos do mesmo tipo definidos para o mesmo evento, estes
serão disparados na ordem alfabética de seus nomes.
•
Considerações Importantes:
–
–
–
–
–
O Trigger não pode ser chamado diretamente;
O Trigger faz parte de um bloco transacional;
Obrigatório associar um trigger a uma table;
Quando a tabela é excluída o trigger também é excluído;
O Trigger depende exclusivamente dele e da tabela que esta associado.
Triggers e suas informações
• Consultando a relação de triggers existentes em um banco de dados:
– Select * from Sys.Triggers
• Visualizando o código de um trigger existente:
– Use Estoques
Go;
Select Name, Definition
From Sys.SQL_Modules Inner Join Sys.Triggers
On Sys.SQL_Modules.object_id = sys.triggers.object_id
Trabalhando com Triggers
• Criando um novo trigger:
USE AdventureWorks
GO;
IF OBJECT_ID ('Sales.reminder1', 'TR') IS NOT NULL
DROP TRIGGER Sales.reminder1
GO;
CREATE TRIGGER reminder1
ON Sales.Customer
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Customer Relations', 16, 10)
GO
Trabalhando com Triggers
• Alterando um trigger existente:
USE AdventureWorks
GO;
ALTER TRIGGER reminder1
ON Sales.Customer
AFTER INSERT, UPDATE
AS RAISERROR ('Notify Customer Relations!!!!', 16, 10)
GO
Trabalhando com Triggers
• Excluíndo a Table e removendo o trigger existente:
– Drop Table Sales.Customer;
• Excluíndo somente o trigger existente:
– Drop Trigger reminder1;
PRÁTICA - II
Revisão
 Stored Procedures.
 Triggers.
Download