Anda di halaman 1dari 13

Oracle Database 11g: PL/SQL

DEPENDÊNCIA ENTRE OBJETOS


Objetivos
 Rastrear dependências processuais;

 Prever o efeito de mudanças em objetos do banco


de dados nos procedimentos e funções;

 Gerenciar dependências procedurais.


Dependência entre
objetos
 A procedure ou função pode direta ou indiretamente (através da intermediação de uma
view, procedure, função ou package: procedure e função) referenciar os seguintes
objetos:
 Tabelas;
 Views;
 Sequences;
 Procedures;
 Functions;
 Packages: procedures e functions.

Dependência direta Dependência direta

View ou procedure: referenciada/ Tabela referenciada


Procedure dependente dependente

Dependência indireta
Dependência local
Consultando dependência
direta entre objetos
SELECT name, type, referenced_name, referenced_type
FROM user_dependencies
WHERE referenced_name IN ('EMPLOYEES', 'EMP_PKG')
ORDER BY referenced_name;
Consultando status dos objetos
SELECT *
FROM user_objects
WHERE status LIKE 'INVALID'
ORDER BY object_name;
/
SELECT name, type, referenced_name, referenced_type
FROM user_dependencies
WHERE name like ('RAISE_SALARY')
ORDER BY referenced_name;
/
SELECT name, type, referenced_name, referenced_type
FROM user_dependencies
WHERE name IN (
SELECT object_name
FROM user_objects
WHERE status LIKE 'INVALID')
ORDER BY referenced_name;
Status dos objetos
 Todo objeto de banco de dados possui um status.

Status Descrição
VALID Objetos que foram compilados com
sucesso usando a defnição do
dicionário de dados.
COMPILED WITH Objeto compilado com erro.
ERRORS
INVALID O objeto que é referenciado sofreu
mudanças. Somente objetos
dependentes fcam inválidos.
UNAUTHOURIZED O privilégio de acesso no objeto
referenciado foi revogado. Somente
objetos dependentes podem ser
desautorizados.
Status dos objetos

 Procedure A é diretamente dependente da view B. A view B é diretamente


dependente da tabela C. Procedure A é indiretamente dependente da tabela
C;
 Dependências direta são invalidadas somente quando ocorre mudanças
nos objetos que referenciados;
 Dependência indireta podem ser invalidadas através de mudanças nos
objetos referenciados pelo seu objeto dependente.
Invalidando objetos
dependentes: Exemplo
CREATE VIEW comissao AS
SELECT first_name, last_name, commission_pct
FROM employees
WHERE commission_pct > 0;

CREATE VIEW salarios_gerentes AS


SELECT *
FROM employees
WHERE salary > 15000;

SELECT object_name, status


FROM user_objects
WHERE object_type LIKE 'VIEW'
ORDER BY object_name;
Invalidando objetos
dependentes: Exemplo
DESC employees;

ALTER TABLE employees MODIFY email VARCHAR2(25);

SELECT object_name, status


FROM user_objects
WHERE object_type LIKE 'VIEW'
ORDER BY object_name;
Fine-Grained gerenciamento de
dependência: Exemplo 1
CREATE TABLE dep_teste
(col_a NUMBER,
col_b NUMBER,
col_c NUMBER);

CREATE VIEW view_dep_teste AS


SELECT col_a, col_b FROM dep_teste;

SELECT ud.name, ud.type, ud.referenced_name,


ud.referenced_type, uo.status
FROM user_dependencies ud, user_objects uo
WHERE ud.name = uo.object_name
AND ud.name = UPPER('view_dep_teste');
Fine-Grained gerenciamento de
dependência: Exemplo 1
ALTER TABLE dep_teste ADD (col_d VARCHAR2(30));

SELECT ud.name, ud.type, ud.referenced_name,


ud.referenced_type, uo.status
FROM user_dependencies ud, user_objects uo
WHERE ud.name = uo.object_name
AND ud.name = UPPER('view_dep_teste');

ALTER TABLE dep_teste MODIFY (col_a VARCHAR2(20));


Fine-Grained gerenciamento de
dependência: Exemplo 1
CREATE OR REPLACE PACKAGE pkg_dep
IS
PROCEDURE proc_dep;
END pkg_dep;
/
CREATE OR REPLACE PROCEDURE proc_teste
IS
BEGIN
pkg_dep.proc_dep();
END;
/
CREATE OR REPLACE PACKAGE pkg_dep
IS
PROCEDURE proc_dep;
PROCEDURE teste;
END pkg_dep;
/

Anda mungkin juga menyukai