Escolar Documentos
Profissional Documentos
Cultura Documentos
br
learningdatabase.com.br
07/05/2018
RODRIGOSAITO
EXECUÇÃO DA PROCEDURE
EXEMPLO DE CÓDIGO
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 1/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
CURSOR cur_ret_employees is
SELECT EMPLOYEE_ID, FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
WHERE EMPLOYEE_ID BETWEEN p_employee_id_inicial AND
p_employee_id_final;
BEGIN
v_contador := 0;
TESTE DE DEBUG
TRIGGERS (GATILHOS)
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 2/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
Podemos escrever triggers que disparam em uma das operações que ocorre no banco de
dados:
DML (insert, update, delete)
DDL (create, alter, drop)
Operações no banco como SERVERERROR, LOGON, LOGOFF, STARTUP ou SHUTDOWN;
Em DML simples
BEFORE
AFTER
INSTEAD OF
Um tipo de evento da trigger determina como as cláusulas da declaração DML irá executar a
trigger. As possibilidade são:
INSERT
UPDATE [OF COLUMN]
DELETE
O corpo determina a ação é chamada e é um bloco PL/SQL ou a chamada de uma
procedure;
Voce pode especificar o tempo que a trigger irá ser executada em uma das declarações:
BEFORE: Executa o corpo da trigger antes do acionamento do evento DML na tabela;
AFTER: Executa o corpo da trigger depois do acionamento do evento DML na tabela;
INSTEAD OF: Executa o corpo da trigger ao invés do evento disparado (geralmente um
comando DML);
A sequencia de disparo de uma trigger em uma tabela quando são manipuladas várias
linhas:
desc employees
–EXEMPLO 2
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 5/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
--teste da chamada
UPDATE employees
SET salary = 15500
WHERE last_name = 'Russell';
Quando uma linha é atingida, o motor do run-time PL/SQL cria e popula duas estruturas de
dados:
OLD: armazena os valores originais do registro processado pela trigger;
NEW: contém os novos valores;
NEW e OLD tem a mesma estrutura do registro declarado usando %ROWTYPE na tabela a
qual a trigger é atachada (criada);
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 6/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
UPDATE EMPLOYEES
SET SALARY = 7000,
LAST_NAME = 'Smith'
WHERE EMPLOYEE_ID = 999;
SELECT *
FROM AUDIT_EMP;
Exercícios
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 7/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
1. Crie uma tabela chamada empregados2 com a mesma estrutura da tabela employees. Faça
uma trigger que a medida que a tabela employees for sido preenchida, essa tabela
empregados2 deve ter os mesmos dados;
2. Faça uma trigger que verifique se os dados da tabela empregados2 está sendo alterada.
Caso o salário esteja sendo alterado, a trigger não deve permitir gravar o registro;
3. Crie uma tabela chamada empregados3. Copie todos os dados que tenham o job_id =
‘IT_PROG’ da tabela employees para essa tabela. Crie uma outra tabela chamada
log_empregados3, contendo as estrutura da tabela empregados3, com dados antes e depois de
alterações. Faça uma trigger na tabela empregados3 para fazer essa auditoria;
PACKAGES (Pacotes)
Identificadores definidos como privado o corpo da Package e não visível do lado de fora do
corpo da package;
Todos construtores privados precisam ser declarados antes de eles serem referenciados;
Construtores públicos são visíveis para todo o corpo da Package;
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 9/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
EXECUTE COMM_PKG.RESET_COMM(0.15);
Exercícios
1. Faça uma Package que faça a Insert de funcionários (employees) e Select por ID. Deve conter
também uma função que retorne o nome completo do funcionário, passando por
parâmetro o ID. Faça os devidos testes de chamadas;
2. Crie uma Package que faça o Insert, Update, Delete, e Select por ID do Departamento e
outra Select pelo Nome do Departamento. Para fazer Inserção e atualização, é necessário
verificar se o nome do departamento não exista na tabela. Em caso de um departamento já
existente, exiba uma mensagem para ser exibido pelo ambiente chamador. Faça os devidos
testes de chamadas;
Video 01
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 10/11
02/02/2019 Banco de Dados II – Aula 13 – learningdatabase.com.br
Anúncios
REPORT THIS AD
REPORT THIS AD
DESENVOLVIMENTO EM BANCO DE DADOS PL/SQL
DESENVOLVIMENTO ORACLE
WordPress.com.
https://learningdatabase.com.br/2018/05/07/banco-de-dados-ii-aula-13/ 11/11