Oracle PL/SQL Tutorial/System Tables Data Dictionary/user dependencies

Материал из SQL эксперт
Перейти к: навигация, поиск

Check dependencies for procedure

   <source lang="sql">

SQL> CREATE TABLE EMP(

 2      EMPNO NUMBER(4) NOT NULL,
 3      ENAME VARCHAR2(10),
 4      JOB VARCHAR2(9),
 5      MGR NUMBER(4),
 6      HIREDATE DATE,
 7      SAL NUMBER(7, 2),
 8      COMM NUMBER(7, 2),
 9      DEPTNO NUMBER(2)
10  );

Table created. SQL> create or replace procedure P1 is

 2   v_cnt number;
 3   begin
 4       select count(*) into v_cnt from emp;
 5   end;
 6  /

SQL> create or replace procedure P2 is

 2   begin
 3       P1;
 4   end;
 5  /

SQL> create or replace procedure P3 is

 2   begin
 3       P2;
 4   end;
 5  /

SQL> create or replace procedure P4 is

 2   begin
 3       P3;
 4   end;
 5  /

SQL> SQL> select name, type,referenced_name, referenced_type from user_Dependencies where rownum < 20

 2  /

Enter... SQL></source>


Check package reference

   <source lang="sql">

SQL> SQL> create table t ( x int ); Table created. SQL> SQL> create or replace view v as select * from t; View created. SQL> SQL> create or replace procedure p

 2  as
 3  begin
 4          for x in ( select * from t )
 5          loop
 6                  null;
 7          end loop;
 8  end;
 9  /

SQL> SQL> create or replace function f return number

 2  as
 3          countValue number;
 4  begin
 5          select count(*) into countValue from t;
 6          return countValue;
 7  end;
 8  /

Function created. SQL> SQL> SQL> create or replace procedure p2

 2  as
 3  begin
 4          p;
 5  end;
 6  /

Warning: Procedure created with compilation errors. SQL> SQL> create or replace package p1

 2  as
 3          procedure p;
 4  end;
 5  /

SQL> SQL> create or replace package body p1

 2  as
 3  procedure p
 4  as
 5  begin
 6          for x in ( select * from t )
 7          loop
 8                  null;
 9          end loop;
10  end;
11  end p1;
12  /

Warning: Package Body created with compilation errors. SQL> SQL> create or replace package p2

 2  as
 3          procedure p;
 4  end;
 5  /

SQL> SQL> create or replace package body p2

 2  as
 3  procedure p
 4  as
 5  begin
 6          p1.p;
 7  end;
 8  end p2;
 9  /

Warning: Package Body created with compilation errors. SQL> SQL> select name, type, referenced_name, referenced_type

 2    from user_dependencies
 3   where referenced_owner = user  and rownum < 20
 4   order by name
 5  /

NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


COMPILEERROR PROCEDURE DUAL NON-EXISTENT COMPILE_ERROR PROCEDURE DUAL NON-EXISTENT NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


DEFINER_RIGHTS PACKAGE BODY DUAL NON-EXISTENT LOOPING_EXAMPLE PROCEDURE DBMS_OUTPUT NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


NON-EXISTENT MONTH_GENERATOR FUNCTION SQLMONTH_TABLETYPE TYPE MONTH_GENERATOR_PIPED FUNCTION NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


SQLMONTH_TABLETYPE TYPE ORD_GENERATOR FUNCTION ORD_TYPE TYPE

NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


ORD_GENERATOR FUNCTION ORD_TABLE TYPE ORD_GENERATOR_PIPED FUNCTION ORD_TABLE TYPE NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


ORD_GENERATOR_PIPED FUNCTION ORD_TYPE TYPE ORD_TABLE TYPE ORD_TYPE NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


TYPE PRODUCT_PACKAGE PACKAGE BODY PRODUCT_PACKAGE PACKAGE P_ADD_ORDERS PROCEDURE NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


DUAL NON-EXISTENT P_ADD_ORDERS PROCEDURE ORDER_SEQ NON-EXISTENT

NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


P_ADD_ORDERS PROCEDURE P_ADD_ITEMS PROCEDURE P_ADD_PROD PROCEDURE PRODUCT_SEQ NON-EXISTENT NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


READCLOB PROCEDURE DBMS_OUTPUT NON-EXISTENT TEMPERATURE_CONVERSION PROCEDURE DBMS_OUTPUT NAME TYPE


-----------------

REFERENCED_NAME


REFERENCED_TYPE


NON-EXISTENT USE_G2 FUNCTION DUAL NON-EXISTENT

19 rows selected.</source>


Query user_dependencies

   <source lang="sql">

SQL> SELECT name, type

 2  FROM      user_dependencies
 3  WHERE     referenced_name = UPPER("&object_name")
 4  AND       referenced_type = UPPER("&object_type")
 5  and       rownum < 2
 6  ORDER BY  name;</source>
   
  

Query user_dependencies for a function

   <source lang="sql">

SQL> SQL> set echo on SQL> SQL> SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,

 2                    ENAME VARCHAR2(10),
 3                    JOB VARCHAR2(9),
 4                    MGR NUMBER(4),
 5                    HIREDATE DATE,
 6                    SAL NUMBER(7, 2),
 7                    COMM NUMBER(7, 2),
 8                    DEPTNO NUMBER(2));

Table created. SQL> SQL> SQL> INSERT INTO EMP VALUES (7369, "SMITH", "CLERK", 7902, TO_DATE("17-DEC-1980", "DD-MON-YYYY"), 800, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES (7499, "ALLEN", "SALESMAN", 7698, TO_DATE("20-FEB-1981", "DD-MON-YYYY"), 1600, 300, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7521, "WARD", "SALESMAN", 7698, TO_DATE("22-FEB-1981", "DD-MON-YYYY"), 1250, 500, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7566, "JONES", "MANAGER", 7839, TO_DATE("2-APR-1981", "DD-MON-YYYY"), 2975, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES (7654, "MARTIN", "SALESMAN", 7698,TO_DATE("28-SEP-1981", "DD-MON-YYYY"), 1250, 1400, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7698, "BLAKE", "MANAGER", 7839,TO_DATE("1-MAY-1981", "DD-MON-YYYY"), 2850, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7782, "CLARK", "MANAGER", 7839,TO_DATE("9-JUN-1981", "DD-MON-YYYY"), 2450, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES (7788, "SCOTT", "ANALYST", 7566,TO_DATE("09-DEC-1982", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES (7839, "KING", "PRESIDENT", NULL,TO_DATE("17-NOV-1981", "DD-MON-YYYY"), 5000, NULL, 10); 1 row created. SQL> INSERT INTO EMP VALUES (7844, "TURNER", "SALESMAN", 7698,TO_DATE("8-SEP-1981", "DD-MON-YYYY"), 1500, 0, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7876, "ADAMS", "CLERK", 7788,TO_DATE("12-JAN-1983", "DD-MON-YYYY"), 1100, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES (7900, "JAMES", "CLERK", 7698,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 950, NULL, 30); 1 row created. SQL> INSERT INTO EMP VALUES (7902, "FORD", "ANALYST", 7566,TO_DATE("3-DEC-1981", "DD-MON-YYYY"), 3000, NULL, 20); 1 row created. SQL> INSERT INTO EMP VALUES (7934, "MILLER", "CLERK", 7782,TO_DATE("23-JAN-1982", "DD-MON-YYYY"), 1300, NULL, 10); 1 row created. SQL> SQL> create or replace function count_emp return number

 2  as
 3          l_cnt number;
 4  begin
 5          select count(*) into l_cnt from emp;
 6          return l_cnt;
 7  end;
 8  /

Function created. SQL> SQL> select referenced_name, referenced_type

 2  from user_dependencies
 3  where name = "COUNT_EMP" and type = "FUNCTION"
 4  /

REFERENCED_NAME


REFERENCED_TYPE


STANDARD PACKAGE SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE EMP TABLE

SQL> select referenced_name, referenced_type

 2  from user_dependencies
 3  where name = "GET_ROW_CNTS" and type = "FUNCTION"
 4  /

REFERENCED_NAME


REFERENCED_TYPE


STANDARD PACKAGE SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE

SQL> drop table emp; Table dropped.</source>


Query user_dependencies for reference name

   <source lang="sql">

SQL> SQL> SELECT name, type, referenced_owner r_owner, referenced_name r_name,

 2         referenced_type r_type
 3  FROM   user_dependencies
 4  WHERE  name IN ("CALL_TEST_PROC", "TEST_PACK")
 5  OR     referenced_name IN ("CALL_TEST_PROC", "TEST_PACK");

NAME TYPE R_OWNER


----------------- ------------------------------

R_NAME


R_TYPE


TEST_PACK PACKAGE BODY SYS STANDARD PACKAGE CALL_TEST_PROC PROCEDURE SYS SYS_STUB_FOR_PURITY_ANALYSIS PACKAGE NAME TYPE R_OWNER


----------------- ------------------------------

R_NAME


R_TYPE


TEST_PACK PACKAGE BODY PUBLIC DBMS_OUTPUT SYNONYM TEST_PACK PACKAGE BODY sqle DBMS_OUTPUT NAME TYPE R_OWNER


----------------- ------------------------------

R_NAME


R_TYPE


NON-EXISTENT CALL_TEST_PROC PROCEDURE sqle TEST_PACK PACKAGE TEST_PACK PACKAGE BODY sqle NAME TYPE R_OWNER


----------------- ------------------------------

R_NAME


R_TYPE


TEST_PACK PACKAGE

6 rows selected. SQL></source>