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

--定时器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体
    select 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;



这是平时工作中的一点小总结比较简单。类似的很多功能可以通过上面的知识去实现。希望能对大家有点启发!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值