Oracle PL/SQL Tutorial/System Packages/dbms lock

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

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>