Вы находитесь на странице: 1из 2

1) Considere o seguinte procedimento

1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
a)
b)
c)
d)
e)
f)

CREATE OR REPLACE PROCEDURE altera_salario (


id_empregado IN employees.employee_id%TYPE,
novo_salario IN employees.salary%TYPE
) IS
Empregado_Invalido EXCEPTION;
BEGIN
UPDATE employees
SET salary = novo_salario
WHERE employee_id = id_empregado;
IF SQL%NOTFOUND THEN
RAISE Empregado_Invalido;
END IF;
EXCEPTION
WHEN Empregado_Invalido THEN
DBMS_OUTPUT.PUT_LINE('Este funcionario no existe');
END

Qual a funo do %Type na linha 2?


O que empregado_invlido na linha 5?
O que testado na linha 10? Qual a funo dessa linha para o algoritmo?
O que faz o RAISE da linha 11? Qual sua importncia para o algoritmo?
Quando o bloco EXCEPTION localizado a partir da linha 13 ser executado?
A mensagem gerada na linha 15 uma boa prtica? Por qu?

2) Transforme o procedimento da questo 1 (altera_salario) em uma funo chamada


func_altera_salario do tipo BOOLEAN que retorne FALSE em caso de exceo ou TRUE
em caso de sucesso.
3) Enumere todas as possveis excees que podem ser geradas na instruo UPDATE da
funo func_altera_salario da questo 2?
4) Reconstrua a funo (func_altera_salario) em uma nova funo chamada
func_altera_salario_excep adicionando-lhe todos os possveis tratamentos de exceo
para a operao UPDATE nela contida.
5) Crie a tabela para log de erros de aplicao chamada tab_erros conforme instruo
abaixo:
CREATE TABLE tab_erros (
Erro NUMBER(6),
Usurio VARCHAR2(30),
Date DATE
);
Considere tambm o seguinte procedimento remove_depto:
1.
2.
3.
4.
5.
6.
7.

CREATE OR REPLACE PROCEDURE remove_depto (


depto IN departments.department_id%TYPE
) IS
restam_empregados EXCEPTION;
PRAGMA EXCEPTION_INIT(restam_empregados,-2292);
qtd NUMBER := 0;
BEGIN

DELETE FROM departments


8.
WHERE department_id = depto;
9.
IF SQL%NOTFOUND THEN
10.
RAISE_APPLICATION_ERROR(-20001,'Departamento '||depto||' no existe');
11.
END
IF;
12.
13. EXCEPTION
WHEN restam_empregados THEN
14.
SELECT COUNT(*) INTO qtd
15.
FROM employees
16.
WHERE department_id = depto;
17.
DBMS_OUTPUT.PUT_LINE('Departamento '|| depto ||' tem '|| qtd ||' emps');
18.
19. END;

a) Transforme o procedimento remove_depto na funo func_remove_depto que


retorna TRUE em caso de sucesso ou FALSE em caso de falha. Essa nova funo
deve inserir o erro gerado pela exceo na tabela tab_erros descrita
anteriormente e no emitir mensagem no console (retirar os comandos
DMBS_OUTPUT.PUT_LINE). Na instruo de insero na tabela erro, utilize a
funo SYSDATE para a coluna data e utilize a funo USER para a coluna
usurio.
6) Considere o procedimento exclui_paises abaixo:
1.
CREATE OR REPLACE PROCEDURE exclui_paises (
2.
codigo_pais IN countries.country_id%TYPE
3.
) IS;
4.
BEGIN
5.
DELETE countries
6.
WHERE country_id = codigo_pais;
7.
EXCEPTION
8.
WHEN OTHERS THEN
9.
DBMS_OUTPUT.PUT_LINE('Cdigo de Erro= '||SQLCODE);
10.
DBMS_OUTPUT.PUT_LINE('Menagem de Erro= '||SQLERRM);
11.
END;
a) Na linha 9, para que serve a funo SQLCODE?
b) Na linha 10, para que serve a funo SQLERRM?
c) Cite 10 cdigos possveis retornados pela funo SQLCODE e suas respectivas
mensagens.
d) Transforme o procedimento exclui_paises na funo func_excluir_paises que retorna
TRUE em caso de sucesso e FALSE em caso de exceo. Alm disso, substitua as
mensagens de erro das linhas 9 e 10 por uma instruo que insira os dados do erro na
tabela tab_erros descrita na questo 5.
7) Coloque todos os procedimentos e funes desta atividade num pacote com nome
que julgar apropriado.

Вам также может понравиться