Tags
With Version 12.1 ORACLE provided a new way to determine that a program unit may only be called by other program units which are part of a whilelist. This new feature was implemented using the ACCESSIBLE BY clause. ACCESSIBLE BY was declared on top level (e.g. package specification).
ORACLE 12.2 provides a higher granularity for the whitelist. It is now possible to define the access on a packaged procedure/function too.
Code Example:
CREATE OR REPLACE PACKAGE emp_tapi IS TYPE emp_tapi_rect IS RECORD (ename emp.ename%TYPE , comm emp.comm%TYPE , hiredate emp.hiredate%TYPE , empno emp.empno%TYPE , mgr emp.mgr%TYPE , job emp.job%TYPE , deptno emp.deptno%TYPE , sal emp.sal%TYPE); TYPE emp_tapi_tabt IS TABLE OF emp_tapi_rect; -- ======================================================================== -- insert -- ======================================================================== PROCEDURE ins (emp_tapi_rec IN OUT NOCOPY emp_tapi_rect) ACCESSIBLE BY (PACKAGE emp_maint_up); -- ======================================================================== -- update -- ======================================================================== PROCEDURE upd (emp_tapi_rec IN emp_tapi_rect) ACCESSIBLE BY (PACKAGE emp_maint_up); -- ======================================================================== -- delete -- ======================================================================== PROCEDURE del (p_empno IN emp.empno%type) ACCESSIBLE BY (TRIGGER emp_io_d_t); END emp_tapi; / CREATE OR REPLACE PACKAGE BODY emp_tapi IS -- ======================================================================== -- insert -- ======================================================================== PROCEDURE ins (emp_tapi_rec IN OUT NOCOPY emp_tapi_rect) ACCESSIBLE BY (PACKAGE emp_maint_up) IS BEGIN ...
As you can see, ACCESSIBLE BY clause has to be specified in specification and body, if we want to define the whitelist on subprograms.
Conclusion
The ACCESSIBLE BY clause is very useful (e.g. refactoring) and the higher granularity will help to make it even better.