Oracle PL/SQL Tutorial/System Packages/dbms lock

Материал из SQL эксперт
Перейти к: навигация, поиск

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>