CREATE OR REPLACE FUNCTION granted_function RETURN VARCHAR2 ACCESSIBLE BY (FUNCTION known_function, PROCEDURE known_procedure ) IS BEGIN RETURN 'Execution Granted!'; END; / CREATE OR REPLACE FUNCTION known_function RETURN VARCHAR2 IS received VARCHAR2(50); BEGIN received := granted_function(); DBMS_OUTPUT.PUT_LINE('Received: ' || received); RETURN ''; END; / SET SERVEROUTPUT ON SELECT known_function() FROM dual; CREATE OR REPLACE FUNCTION unknown_function RETURN VARCHAR2 IS received VARCHAR2(50); BEGIN received := granted_function(); DBMS_OUTPUT.PUT_LINE('Received: ' || received); RETURN ''; END; / SHOW ERRORS DROP FUNCTION granted_function; DROP FUNCTION known_function; DROP FUNCTION unknown_function;