ORA-04042: procedure, function, package, or package body does not exist
ORA-04042 is thrown by Oracle Database when a session attempts to reference or execute a stored procedure, function, package, or package body that cannot be found in the current context. This typically means the object does not exist, is owned by a different schema, is in an INVALID state, or the calling user lacks EXECUTE privilege. Understanding the root cause quickly is critical in production environments to minimize downtime.
Top 3 Causes and SQL Examples
1. Object Does Not Exist or Belongs to a Different Schema
The most common cause is a typo in the object name or calling an object without specifying the correct schema prefix.
-- Check if the object exists and who owns it
SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, STATUS
FROM DBA_OBJECTS
WHERE OBJECT_NAME = 'YOUR_PROC_NAME' -- Use UPPERCASE
AND OBJECT_TYPE IN ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY');
-- Call with explicit schema prefix
EXEC HR.YOUR_PROC_NAME(param1, param2);
-- Or create a synonym for easier access
CREATE SYNONYM your_proc_name FOR HR.YOUR_PROC_NAME;
2. Object Is in INVALID State
A package body or procedure can become INVALID when a dependent object (table, type, etc.) is altered or dropped, causing Oracle to invalidate it automatically.
-- Find all INVALID objects in a schema
SELECT OBJECT_NAME, OBJECT_TYPE, STATUS
FROM DBA_OBJECTS
WHERE OWNER = 'HR'
AND STATUS = 'INVALID'
AND OBJECT_TYPE IN ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY');
-- Recompile a specific procedure
ALTER PROCEDURE HR.YOUR_PROC_NAME COMPILE;
-- Recompile a package body
ALTER PACKAGE HR.YOUR_PACKAGE_NAME COMPILE BODY;
-- Check compilation errors
SELECT LINE, POSITION, TEXT
FROM DBA_ERRORS
WHERE OWNER = 'HR'
AND NAME = 'YOUR_PACKAGE_NAME'
ORDER BY SEQUENCE;
-- Recompile all INVALID objects in a schema at once
EXEC UTL_RECOMP.RECOMP_SERIAL('HR');
3. Missing EXECUTE Privilege or Synonym
Oracle intentionally returns ORA-04042 instead of ORA-01031 when a user lacks EXECUTE privilege, hiding the object's existence for security reasons.
-- Check existing EXECUTE grants on an object
SELECT GRANTEE, OWNER, TABLE_NAME, PRIVILEGE
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'YOUR_PROC_NAME'
AND PRIVILEGE = 'EXECUTE';
-- Grant EXECUTE privilege to a specific user
GRANT EXECUTE ON HR.YOUR_PROC_NAME TO SCOTT;
-- Grant to a role (recommended for maintainability)
GRANT EXECUTE ON HR.YOUR_PACKAGE_NAME TO APP_ROLE;
-- Create a public synonym so all users can resolve the name
CREATE PUBLIC SYNONYM your_proc_name FOR HR.YOUR_PROC_NAME;
GRANT EXECUTE ON HR.YOUR_PROC_NAME TO PUBLIC;
Quick Fix Checklist
-
Verify the object name — Query
DBA_OBJECTSwith the exact uppercase name. - Check the schema — Prefix the call with the owner name or create a synonym.
-
Check object status — If
STATUS = 'INVALID', recompile withALTER ... COMPILE. -
Check privileges — Use
DBA_TAB_PRIVSto confirm EXECUTE is granted. -
Review compile errors — Query
DBA_ERRORSto find the root compilation issue.
Prevention Tips
Automate post-deployment validation:
Add an INVALID object check to every deployment script or CI/CD pipeline to catch missing or broken objects before they hit production.
-- Fail deployment if any INVALID objects remain
SELECT OBJECT_NAME, OBJECT_TYPE
FROM DBA_OBJECTS
WHERE OWNER = 'HR'
AND STATUS = 'INVALID'
AND OBJECT_TYPE IN ('PROCEDURE','FUNCTION','PACKAGE','PACKAGE BODY');
-- Expected: no rows returned
Monitor dependencies before DDL changes:
Before altering or dropping a table, check which stored objects depend on it so you can proactively recompile them afterward.
-- Find objects that depend on a specific table
SELECT NAME, TYPE, OWNER
FROM DBA_DEPENDENCIES
WHERE REFERENCED_NAME = 'YOUR_TABLE_NAME'
AND REFERENCED_OWNER = 'HR'
AND REFERENCED_TYPE = 'TABLE';
Related Oracle Errors
| Error Code | Description |
|---|---|
| ORA-00942 | Table or view does not exist |
| ORA-04043 | Object does not exist (raised by DESCRIBE) |
| ORA-01031 | Insufficient privileges |
| ORA-06550 | PL/SQL compilation error (often accompanies ORA-04042) |
📖 Want a more detailed guide?
Check out the full in-depth version (Korean) on oraerror.com — includes detailed analysis, additional SQL examples, and prevention tips.
Top comments (0)