There’s a nice little “sleep” procedure in Oracle: A procedure that stops the execution of the current thread for n seconds.
Strangely, this method can be called in SQL*Plus like so:
EXEC dbms_lock.sleep(10);
but not in another stored procedure or function like so
CREATE OR REPLACE PROCEDURE FOOBAR AS BEGIN DBMS_LOCK.SLEEP(1); END; /
To use “sleep” in your procedures or functions, login as administrator to your database (or ask you admin to to so) and create the following objects:
CREATE OR REPLACE PROCEDURE sleep(seconds NUMBER) AS BEGIN DBMS_LOCK.SLEEP(seconds); END; / CREATE OR REPLACE public synonym sleep FOR sleep; GRANT EXECUTE ON sleep TO public;
and in your procedure just use “sleep”.
3 Comments
Man you saved my day! Had exactly that darn problem and couldn’t figure out why. Thanks a lot!
You’re welcome, Marc.
Nice Blog, btw!
You can call it from a procedure. I suspect you have execute on dbms_lock through a role, but to call the procedure the permission needs to be granted directly to the user.
Post a Comment