Oracle PL/SQL Tutorial/System Packages/dbms lock
artificial delay with the DBMS_LOCK.SLEEP procedure
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>
dbms_lock.sleep
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>