Oracle PL/SQL Tutorial/System Packages/dbms lock
artificial delay with the DBMS_LOCK.SLEEP procedure
<source lang="sql">
SQL> SQL> SQL> SQL> create table employees(
2 empno NUMBER(4) 3 , ename VARCHAR2(8) 4 , init VARCHAR2(5) 5 , job VARCHAR2(8) 6 , mgr NUMBER(4) 7 , bdate DATE 8 , msal NUMBER(6,2) 9 , comm NUMBER(6,2) 10 , deptno NUMBER(2) ) ;
Table created. SQL> SQL> SQL> insert into employees values(1,"Jason", "N", "TRAINER", 2, date "1965-12-18", 800 , NULL, 10); 1 row created. SQL> insert into employees values(2,"Jerry", "J", "SALESREP",3, date "1966-11-19", 1600, 300, 10); 1 row created. SQL> insert into employees values(3,"Jord", "T" , "SALESREP",4, date "1967-10-21", 1700, 500, 20); 1 row created. SQL> insert into employees values(4,"Mary", "J", "MANAGER", 5, date "1968-09-22", 1800, NULL, 20); 1 row created. SQL> insert into employees values(5,"Joe", "P", "SALESREP",6, date "1969-08-23", 1900, 1400, 30); 1 row created. SQL> insert into employees values(6,"Black", "R", "MANAGER", 7, date "1970-07-24", 2000, NULL, 30); 1 row created. SQL> insert into employees values(7,"Red", "A", "MANAGER", 8, date "1971-06-25", 2100, NULL, 40); 1 row created. SQL> insert into employees values(8,"White", "S", "TRAINER", 9, date "1972-05-26", 2200, NULL, 40); 1 row created. SQL> insert into employees values(9,"Yellow", "C", "DIRECTOR",10, date "1973-04-27", 2300, NULL, 20); 1 row created. SQL> insert into employees values(10,"Pink", "J", "SALESREP",null,date "1974-03-28", 2400, 0, 30); 1 row created. SQL> SQL> SQL> SQL> SQL> create table e as select * from employees; Table created. SQL> SQL> alter session set NLS_TIMESTAMP_FORMAT="DD-MON-YYYY HH24:MI:SS.FF3"; Session altered. SQL> SQL> select localtimestamp as table_created from dual; TABLE_CREATED
24-JUL-2008 19:12:49.573 1 row selected. SQL> SQL> execute dbms_lock.sleep(42); PL/SQL procedure successfully completed. SQL> update e
2 set msal = msal + 10;
10 rows updated. SQL> commit; Commit complete. SQL> SQL> SQL> select localtimestamp as after_update_1 from dual; AFTER_UPDATE_1
24-JUL-2008 19:13:31.809 1 row selected. SQL> SQL> execute dbms_lock.sleep(16); PL/SQL procedure successfully completed. SQL> update e
2 set msal = msal - 20 3 where deptno = 10;
2 rows updated. SQL> commit; Commit complete. SQL> select localtimestamp as after_update_2 from dual; AFTER_UPDATE_2
24-JUL-2008 19:13:48.022 1 row selected. SQL> SQL> execute dbms_lock.sleep(42); PL/SQL procedure successfully completed. SQL> delete from e
2 where deptno <= 20;
5 rows deleted. SQL> commit; Commit complete. SQL> select localtimestamp now from dual; NOW
24-JUL-2008 19:14:30.238 1 row selected. SQL> SQL> SQL> SQL> drop table e; Table dropped. SQL> SQL> drop table employees; Table dropped. SQL> SQL></source>
dbms_lock.sleep
<source lang="sql">
SQL> SQL> SQL> create table job_parameters
2 ( jobid number primary key, 3 iterations number, 4 table_idx number );
Table created. SQL> SQL> SQL> create or replace procedure simulation( p_procedure in varchar2, p_jobs in number, p_iters in number )
2 authid current_user 3 as 4 l_job number; 5 l_cnt number; 6 begin 7 for i in 1 .. p_jobs 8 loop 9 begin 10 execute immediate "drop table t" || i; 11 exception 12 when others then null; 13 end; 14 execute immediate "create table t" || i || " ( x int )"; 15 end loop; 16 17 for i in 1 .. p_jobs 18 loop 19 dbms_job.submit( l_job, p_procedure || "(JOB);" ); 20 insert into job_parameters( jobid, iterations, table_idx )values ( l_job, p_iters, i ); 21 end loop; 22 23 commit; 24 loop 25 dbms_lock.sleep(30); 26 select count(*) into l_cnt from job_parameters; 27 exit when (l_cnt = 0); 28 end loop; 29 end; 30 /
Warning: Procedure created with compilation errors. SQL> SQL> show errors Errors for PROCEDURE SIMULATION: LINE/COL ERROR
-----------------------------------------------------------------
25/9 PL/SQL: Statement ignored 25/9 PLS-00201: identifier "DBMS_LOCK" must be declared SQL> SQL> drop table job_parameters; Table dropped. SQL> SQL></source>