oracle 触发器 条件判断6,oracle 笔记6 触发器

--触发器  何云祥制作

create or replace trigger secure_test

before insert on test

begin

if(to_char(sysdate,'dy') in ('星期六','星期日')) or (to_char(sysdate,'hh24:mi') not between '08:00' and '18:00')

then

raise_application_error(-20500,'你只能在工作时间对test表进行操作.');

end if;

end;

--对DML都进行触发

create or replace trigger secure_test

before insert or update or delete on test

begin

if(to_char(sysdate,'dy') in ('星期六','星期日')) or (to_char(sysdate,'hh24:mi') not between '08:00' and '18:00')

then

if deleting then

raise_application_error(-20502,'你只能在工作时间对test表进行删除操作.');

elsif inserting then

raise_application_error(-20500,'你只能在工作时间对test表进行插入操作.');

elsif updating('name') then

raise_application_error(-20503,'你只能在工作时间对test表进行name更新操作.');

else

raise_application_error(-20504,'你只能在工作时间对test表进行更新操作.');

end if;

end if;

end;

--触发器中使用变量

create or replace trigger v_trig instead of

update or delete or insert on v_emp

declare

l_res varchar(20):='';

BEGIN

IF   DELETING THEN

l_res:='You may delete .';

ELSIF  INSERTING THEN

l_res:='You may insert.';

ELSIF   UPDATING ('SALARY') THEN

l_res:='You may update.';

ELSE

l_res:='You may update.';

END IF;

insert into e_msg values(111,l_res,sysdate);

END;

--行级触发器

CREATE OR REPLACE TRIGGER restrict_salary

before  INSERT OR UPDATE OF slary ON employee

FOR EACH ROW

BEGIN

IF :new.slary>1400 THEN

RAISE_APPLICATION_ERROR (-20202,'员工不能赚到这么多薪水');

end if;

END;

--使用when的行级触发器

CREATE OR REPLACE TRIGGER restrict_salary

before  INSERT OR UPDATE OF slary ON employee

FOR EACH ROW    when (new.slary>1400 )    BEGIN        RAISE_APPLICATION_ERROR (-20202,'员工不能赚到这么多薪水');    END;--启用或者禁用某个触发器:alter trigger trigger_name disable|enable--启用或者禁用某个对象上的所有触发器alter table table_name disable|enable all triggers--重新编译触发器alter trigger trigger_name compile--某个系统触发器CREATE OR REPLACE TRIGGER logon_trigAFTER drop  ON  SCHEMABEGIN INSERT INTO e_msg values (seq_2.nextval, user||' drop', sysdate);END;

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值