Object Dependency Analyzer (ddepend.sql)
What This Script Does
Section titled “What This Script Does”This script analyzes object dependencies in the database, showing all objects that depend on a specific referenced object. It helps identify impact analysis before making changes to database objects by revealing which procedures, packages, views, and other objects would be affected by modifications to the referenced object.
Script
Section titled “Script”ttitle 'DEPENDECIES'remset linesize 132remcol OWNER format a6 heading 'OWNER'col NAME format a25 heading 'NAME'col TYPE format a8 heading 'TYPE'col REFERENCED_OWNER format a6 heading 'REF.|OWNER'col REFERENCED_NAME format a25 heading 'REF.|NAME'col REFERENCED_TYPE format a8 heading 'REF.|TYPE'col REFERENCED_LINK_NAME format a6 heading 'REF.|LINK'col DEPENDENCY_TYPE format a8 heading 'DEP.|TYPE'rembreak on REFERENCED_OWNER - on REFERENCED_NAME - on REFERENCED_TYPE - on REFERENCED_LINK_NAME - on DEPENDENCY_TYPEselect REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE, REFERENCED_LINK_NAME, DEPENDENCY_TYPE, OWNER, NAME, TYPEfrom dba_dependencieswhere referenced_owner like upper('&ref_owner')and referenced_name like upper('&ref_object')order by REFERENCED_OWNER, REFERENCED_NAME, REFERENCED_TYPE, REFERENCED_LINK_NAME, DEPENDENCY_TYPE/
-- Run the script in SQL*Plus or SQLcl@ddepend.sql
-- When prompted, enter:-- ref_owner: Owner of the referenced object (use % for all)-- ref_object: Name of the referenced object (use % for pattern matching)
-- Examples:Enter value for ref_owner: HREnter value for ref_object: EMPLOYEES
-- Find all dependencies on tables starting with 'EMP'Enter value for ref_owner: HREnter value for ref_object: EMP%
Parameters
Section titled “Parameters”- &ref_owner - Schema owner of the referenced object
- &ref_object - Name of the referenced object (supports wildcards)
Required Privileges
Section titled “Required Privileges”- SELECT on DBA_DEPENDENCIES
- Typically requires DBA role or SELECT ANY DICTIONARY
Sample Output
Section titled “Sample Output”DEPENDECIES
REF. REF. REF. REF. DEP.OWNER NAME TYPE LINK TYPE OWNER NAME TYPE------ ------------------------- -------- ----- -------- ------ ------------------------- --------HR EMPLOYEES TABLE HARD HR EMP_DETAILS_VIEW VIEW HR ADD_JOB_HISTORY PROCEDURE HR SECURE_EMPLOYEES TRIGGER PAYROL CALC_SALARY FUNCTION REF HR EMP_EMAIL_LIST VIEW HR UPDATE_JOB_HISTORY PROCEDURE
DEPARTMENTS TABLE HARD HR EMP_DETAILS_VIEW VIEW HR DEPT_MANAGER_VIEW VIEW HR DEPT_SUMMARY PACKAGE
Key Output Columns
Section titled “Key Output Columns”- REF. OWNER - Schema owning the referenced object
- REF. NAME - Name of the referenced object
- REF. TYPE - Type of referenced object (TABLE, VIEW, etc.)
- REF. LINK - Database link name if remote dependency
- DEP. TYPE - Type of dependency (HARD or REF)
- OWNER - Schema owning the dependent object
- NAME - Name of the dependent object
- TYPE - Type of dependent object
Understanding Dependencies
Section titled “Understanding Dependencies”Dependency Types
Section titled “Dependency Types”- HARD - Direct dependency, object will become invalid if referenced object changes
- REF - Reference dependency, may not cause invalidation
Common Object Types
Section titled “Common Object Types”- TABLE - Base tables
- VIEW - Views referencing the object
- PROCEDURE/FUNCTION - Stored programs using the object
- PACKAGE - Package specifications or bodies
- TRIGGER - Triggers on or referencing the object
Common Use Cases
Section titled “Common Use Cases”Impact Analysis Before Changes
Section titled “Impact Analysis Before Changes”@ddepend.sql-- Before dropping or modifying a tableEnter value for ref_owner: HREnter value for ref_object: EMPLOYEES-- Review all dependent objects
Find Package Dependencies
Section titled “Find Package Dependencies”@ddepend.sql-- Find what uses a specific packageEnter value for ref_owner: DBMS_OUTPUTEnter value for ref_object: %
Cross-Schema Dependencies
Section titled “Cross-Schema Dependencies”@ddepend.sql-- Find dependencies across schemasEnter value for ref_owner: %Enter value for ref_object: CUSTOMER_DATA
Troubleshooting Dependencies
Section titled “Troubleshooting Dependencies”Invalid Objects After Changes
Section titled “Invalid Objects After Changes”-- Find invalidated objectsSELECT owner, object_name, object_type, statusFROM dba_objectsWHERE status = 'INVALID'AND (owner, object_name) IN ( SELECT owner, name FROM dba_dependencies WHERE referenced_name = '&object_name');
Circular Dependencies
Section titled “Circular Dependencies”-- Detect circular dependenciesWITH dep_tree AS ( SELECT owner, name, type, referenced_owner, referenced_name, referenced_type, LEVEL as dep_level FROM dba_dependencies START WITH owner = '&owner' AND name = '&name' CONNECT BY PRIOR referenced_owner = owner AND PRIOR referenced_name = name)SELECT * FROM dep_treeWHERE (referenced_owner, referenced_name) = ((SELECT owner, name FROM dep_tree WHERE dep_level = 1));
Remote Dependencies
Section titled “Remote Dependencies”-- Find dependencies through database linksSELECT * FROM dba_dependenciesWHERE referenced_link_name IS NOT NULLAND referenced_owner = '&owner';
Best Practices
Section titled “Best Practices”Before Making Changes
Section titled “Before Making Changes”- Always run dependency analysis first
- Document all dependent objects
- Plan for recompilation needs
- Consider cascade effects
Managing Dependencies
Section titled “Managing Dependencies”- Minimize cross-schema dependencies
- Use packages to encapsulate logic
- Document dependency chains
- Test impact in development first
Performance Considerations
Section titled “Performance Considerations”- Large databases may have thousands of dependencies
- Use specific object names rather than wildcards when possible
- Consider creating custom dependency views for frequent analysis
- Index DBA_DEPENDENCIES can improve query performance
Related Scripts
Section titled “Related Scripts”- Invalid Objects (../administration/dinvalid.md) - Find invalid objects
- Database Objects (dobject.md) - Object overview
- Compile Invalid Objects (../generators/compile_invalid.md) - Recompile after changes
Advanced Analysis
Section titled “Advanced Analysis”Dependency Tree
Section titled “Dependency Tree”-- Show full dependency treeSELECT LPAD(' ', 2*(LEVEL-1)) || name as dependency_tree, owner, type, referenced_name, referenced_typeFROM dba_dependenciesSTART WITH referenced_owner = '&owner' AND referenced_name = '&object'CONNECT BY PRIOR owner = referenced_owner AND PRIOR name = referenced_name;
Dependency Depth
Section titled “Dependency Depth”-- Find objects with deepest dependency chainsWITH dep_depth AS ( SELECT name, owner, MAX(LEVEL) as max_depth FROM dba_dependencies CONNECT BY PRIOR owner = referenced_owner AND PRIOR name = referenced_name GROUP BY name, owner)SELECT * FROM dep_depthWHERE max_depth > 3ORDER BY max_depth DESC;