Академический Документы
Профессиональный Документы
Культура Документы
Passo 1
Neste tutorial iremos abordar sobre os fundamentos para a criao de uma trigger e e
procedore.
Mas no caso o que seria uma procedure e um conjunto de rotinas a ser executado.
Um procedimento consiste em um conjunto de declaraes agrupadas como uma
unidade para solucionar um problema especifico ou executar um conjunto de tarefas
Bem finalizo por aqui o assunto sobre procedure e vamos falar um pouco agora sobre as
trigger e sua utilizao.
Uma trigger um procedimento que permite executar automaticamente diversas
operaes como de insero atualizao ou excluso em uma tabela em seu banco de
dados. As triggers de banco de dados pode ser utilizadas de diversas maneiras como
para o gerenciamento do banco das informaes em seu banco de dados .Por exemplo
pode ser usado para automatizar a gerao a gerao de dados fazer a auditoria das
modificaes em banco implantar as restries complexas de integridade e personalizar
as autorizaes complexas de segurana.
Trigger uma das maneiras mais praticas de implementar rotinas para garantir
integridade de dados ou de operaes. As triggers so rotinas ou procedimentos que so
utilizados quando um comando insert, update ou delete executado em uma tabela ou
ate mesmo uma viso.
Uma trigger executada automaticamente sem a interferncia do usurios j uma
procedure por sua vez precisa ser explicitamente invocada. Esta que a grande
diferena entre os dois.
A principal aplicao de uma triggger a criao de consistncias de restrio de
acesso ao banco de dados como rotina de segurana. Ela pode executar comandos
contidos em seu bloco ou acionar as procedures para executar determinada tarefas e ela
esta associada a uma tabela e, em alguns casos a uma viso. O trigger pode fazer o papel
de uma constraint para forar alguma integridade de banco.
A trigger possue algumas restries como por exemplo no pode executar os comandos
commit, rollback ou savepoint, nem tampouco chamar procedures ou funes que
executam tarefas.
Uma trigger serve para:
Criar o contedo de uma coluna derivadas de outras .
Criar mecanismos de validao que envolvam pesquisas em mutiplas tabela.
Criar logs para registrar a utilizao de uma tabela
Atualizar outras tabelas em funo de incluso ou alterao da tabela atual.
[ 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 ]
}
}
a. ON Table - a tabela para o qual o trigger esta sendo criado
b. FOR - deve ser seguido do tipo de comando que acionam o trigger
c. AFTER - determina que o trigger somente sera disparado quando todas as rotinas
especificadas no comando de disparo forem executadas com sucesso
d. INSTEAD OF - Determina que o trigger ser executado ao invs do comando de
disparo do mesmo.
e. [ DELETE ] [INSERT] [UPDATE] - indicam o tipo de ao que deve disparar o
trigger.
Quando voc for criar um Trigger dever definir :
1. O nome
2. A Tabela para o qual o Trigger ir ser criado
3. Quando o Trigger dever ser disparado
4. Os comandos que determinam qual ao o Trigger dever executar.
E aqui encerro minha fala sobre as trigges.
Inicio do passo 2.
Elaborar um arquivo texto contendo os comandos para criao das procedures para o
sistema SIG atendendo os requisitos descritos a seguir:
Procedure ret_comissao_funcionario: calcula o valor da comisso dos funcionrios
baseado no valor de vendas e na porcentagem de comisso (campo comisso da tabela
funcionrio). A procedure deve calcular a comisso de todos os funcionrios do ms
informado se o parmetro cdigo funcionrio for igual a zero ou caso informado o
cdigo do funcionrio, calcular apenas a comisso do funcionrio informado.
Parmetros:
o Ms: o nmero referente ao ms a ser consultado.
o Ano: ano a ser consultado.
o Cdigo do funcionrio: 0 para todos os funcionrios ou o cdigo do funcionrio.
Campos Exibidos:
end;
commit;
end;
Inicio do passo 3.
Elaborar um arquivo texto contendo os comandos para criao das trigger para o
sistema SIG atendendo os requisitos descritos a seguir:
Trigger atualiza_valor_venda: Aps a incluso, alterao ou excluso de um item de
venda a trigger deve
somar os valores totais de todos os itens da venda que ela pertence e atualizar o campo
valortotal da tabela de venda.
create or replace trigger tg_atualiza_valor_venda
BEFORE DELETE OR INSERT OR UPDATE ON itemvenda
for each row
declare
total number;
cada otimizao justificar o motivo das alteraes a serem realizadas e qual sua
importncia no desempenho da consulta.
Nesta consulta abaixo realizei uma contagem dos funcionrios que trabalham na
empresa a mais de 4 anos e ganham acima de quatro mil reis e sua comisso no pode
ser nula agrupando por seus cargos e ordenado de forma decresente.
select count(IDFUNCIONARIO)
from funcionario
where trunc(months_between(SYSDATE, DATAADMISAO) / 12)> 4
and sal > 4000
and COMISAO is not null
group by cargo
order by count(IDFUNCIONARIO) desc;
Nesta consulta abaixo pegamos o id , nome dos cliente e o id da venda onde o valor do
desconto foi maior que a total de descontos para os clientes que compraram mais que
trs produtos no ms de fevereiro.
select c.idcliente, c.nome, v.idvenda
from cliente c, venda v, itemvenda iv
where c.idcliente = v.cliente_venda
and v.idvenda = iv.venda_itemvenda
and iv.valordesconto > (select sum(valordesconto)
from itemvenda)
and qtd > 3
and data between '01/02/2013' and '28/02/2013';
Nesta consulta abaixo contamos a quantidade de produtos que temos em estoque.
select count(IDPRODUTO)
from produtos;
Nesta consulta abaixo pegamos o id e nome do funcionrio que deu o maior desconto no
ano de 2012.
select v.funcionario_venda, nome
max(iv.valordesconto)maior_desconto
from vendas v, itevenda iv, funcionario f
where v.idvenda = iv.venda_itemvenda
and v.funcionario_venda = f.idfuncionario
and data >= '01/01/2012'
and data = '01/01/2012'
and data = '01/01/2012'
and data
begin
select sum(totalvalor) into total
from itemvenda;
if inserting then
update venda set valortotal = total;
elsif inserting then
update venda set valortotal = total;
elsif deliting then
update venda set valortotal = total;
end if;