The Public Specification
CREATE OR REPLACE PACKAGE public_pkg  
IS  
   PROCEDURE do_only_this;  
END; Package created.
My Not-so-private Private Package
CREATE OR REPLACE PACKAGE private_pkg     
IS  
   PROCEDURE do_this;  
  
   PROCEDURE do_that;  
END; Package created.
Add ACCESSIBLE BY to Whitelist
CREATE OR REPLACE PACKAGE private_pkg     
   ACCESSIBLE BY (public_pkg)  
IS  
   PROCEDURE do_this;  
  
   PROCEDURE do_that;  
END; Package created.
Public Package Body is a Redirect
CREATE OR REPLACE PACKAGE BODY public_pkg  
IS  
   PROCEDURE do_only_this  
   IS  
   BEGIN  
      private_pkg.do_this;  
      private_pkg.do_that;  
   END;  
END; Package Body created.
CREATE OR REPLACE PACKAGE BODY private_pkg 
IS 
   PROCEDURE do_this 
   IS 
   BEGIN 
      DBMS_OUTPUT.put_line ('THIS'); 
   END; 
 
   PROCEDURE do_that 
   IS 
   BEGIN 
      DBMS_OUTPUT.put_line ('THAT'); 
   END; 
END; Package Body created.
Invoke My Public Program
BEGIN  
   public_pkg.do_only_this;  
END; THIS
THAT
But Not This
BEGIN  
   private_pkg.do_this;  
END; ORA-06550: line 2, column 4: PLS-00904: insufficient privilege to access object PRIVATE_PKGMore Details: https://docs.oracle.com/error-help/db/ora-06550