Using Pragma RESTRICT_REFERENCES:
The function called from the SQL statements should obey certain rules meant to control the side effects. To check for violation of the rules, you can use the RESTRICT_REFERENCES pragma that instructs the compiler to report reads and/or writes to database tables and/or package variables.
Avoiding Deadlocks
In some situations when executing a SQL data definition statement, the outcome is a deadlock.
For illustration, the procedure below causes a deadlock as it attempts to drop itself. To avoid the deadlocks, never try to ALTER or DROP a subprogram or package while you are still using it.
CREATE PROCEDURE calc_bonus (emp_id NUMBER) AS
BEGIN
...
EXECUTE IMMEDIATE 'DROP PROCEDURE calc_bonus';
-- causes "timeout occur while waiting to the lock object" error
END;