您的位置:首页 > 数据库 > Oracle

oracle数据库触发器,存储过程,定时器job,package的基本用法总结

2014-07-19 18:35 483 查看
--定时器job语法参数解析

使用Submit()过程,工作被正常地计划好。 
这个过程有五个参数:job、what、next_date、interval与no_parse。 

PROCEDURE Submit ( job      
OUT binary_ineger, 
What      IN  varchar2, 
next_date IN  date, 
interval  IN  varchar2, 
no_parse  IN  booean:=FALSE) 

job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 
what参数是将被执行的PL/SQL代码块。 
next_date参数指识何时将运行这个工作。 
interval参数何时这个工作将被重执行。 
no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 
指示此PL/SQL代码在它第一次执行时应进行语法分析, 
而FALSE指示本PL/SQL代码应立即进行语法分析。 

--创建定时器job:

1.定时同步数据,可用以两台服务器数据库数据的同步

declare   

job number;      --系统生成job标示id

begin

sys.dbms_job.submit(job,'thme_to_thme2;',sysdate,'sysdate+1/1440');  
end;

1.查询jobs的相关视图

select job,last_date,last_sec,broken,failures,interval, what from dba_jobs 

 dba_jobs:系统表

job: 指的是job的id号。比如上面的 41

failures:job执行的时候失败次数,如果超过了15次,那么broken列将被标为Y,以后就不会运行该job了

broken:默认为N,如果为Y,意味着不再执行该job!

interval:执行job的间隔时间。

what:该job的实际工作。

2. 查看相关job信息

相关视图
dba_jobs
all_jobs
user_jobs
dba_jobs_running 包含正在运行job相关信息

---存储过程例子:

1.实现表数据复制

create or replace procedure thme_to_thme2 as--无参数的过程  

   rownums number;--变量定义

  myid   number(8);

  myname varchar(20) :='赋初值';

  tem    varchar(20);
  cursor c1 is --赋值给游标,is后面是PL/SQL体

    selec
4000
t distinct t.nid, t.sname from T_HBM t;

begin

  rownums := 0;--赋初值

  if c1%isopen = false then

    --打开游标

    open c1;

  end if;

  loop

    rownums := rownums + 1;

    fetch c1 --从游标中获得值赋值给变量,循环,直到结束

      into myid, myname;      

    exit when c1%notfound;

          insert into T_HBM2(ID,Name) values(myid,myname);

    if mod(rownums,2)=0 then 

    commit;

    end if;

  end loop;

end;

--触发器:

1.实现在删除一条记录复制到另外一张表

/*new是新插入的数据,old是原来的数据

insert只会有new,代表着要插入的新记录

delete只会有old,代表着要删除的记录

update由于执行的是先删除旧的记录,再插入新的记录,因此new和old都会有,且含义与上面的相同
*/

create or replace trigger TR_TBM

before delete on T_HBM --在增删改成之前或之后

  for each row     --对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。

declare

  counts number; --声明变量

  newid  number; --声明变量

begin

  /*

    select count(*)

      into counts --给变量赋值

      from T_HBM t

     where t.nID = :new.nID; --new 表示要插入的数据对象,即T_HBM表中的一条记录。这个模块只是举例

    if counts = 0 then

      newid := seq_THBM.Nextval;

    end if;

  */

  insert into T_HBM_DEL (ID, NAME) values (:OLD.nid, :old.sname); --old是执行上面删除T_HBM中的对象(一条记录)

end TR_TBM;

1.禁止删除某张表的数据

CREATE OR REPLACE TRIGGER "TR_HBM_DEL" 

  BEFORE delete ON T_HBM

begin

  Raise_application_error(20001, '禁止该表数据!');  --弹出提示信息

end;

这是平时工作中的一点小总结比较简单。类似的很多功能可以通过上面的知识去实现。希望能对大家有点启发!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: