代码改变世界

Oracle 触发器的简单命令

2016-12-15 16:40  甘雨路  阅读(1208)  评论(0编辑  收藏  举报
-- 创建触发器的基本命令
create or replace trigger td after delete on ss
begin
  dbms_output.put_line('删除成功');
end;

-- 创建触发器的基本命令
create or replace trigger dd after insert on ss
for each row
--没有变量可去掉声明
--declare
begin
  dbms_output.put_line('成功插入数据');
end;

-- 场景-:复杂的安全性检查
--raise--抛出的数据库的错误
--raise_application_error:抛出的是应用程的错误  区间(-20000 ,29999)
create or replace trigger dg before insert or delete or update on ss
begin
  if to_char(sysdate,'day') in ('星期六','星期日') or
     to_number(to_char(sysdate,'hh24')) not between 9 and 18 
     then raise_application_error(-20001,'非工作时间禁止操作数据库');
  end if;
end;


--数据确认
create or replace trigger fd before insert on scores
for each row
begin
  if :new.math < 0 
  or :new.chinese < 0
  or :new.english < 0
  then raise_application_error(-20002,'分数不能为零');
  end if;
end;



--实现审计功能
create table info(
    infomation varchar2(45)
);

-- 不及格的学生全部信息插入info表
create or replace trigger ch after update on st
for each row
begin
  if :new.math < 60 
  or :new.english < 60
  then insert into info values(:new.math||','||:new.english);
  end if;
end;


--数据备份和同步(此处用表演示)
--创建备份表
create table st_copy as select * from test1;

create or replace trigger std after update on test1
for each row
begin
    --更新后表st的数据备份到表st_copy里面
    update st_copy set age=:new.age,name=:new.name where id = :new.id;
end;