首页 > 其他分享 >触发器

触发器

时间:2023-02-28 17:15:18浏览次数:19  
标签:触发器 dept trigger emp new deptno

触发器的一般语法结构:

create [or replace] trigger Ttrigger_name
{before|after} Triggering_event  on  table_name
[for each row]
[follows another_trigger]
[enable/disable]
[when  condition]
declare
    declaration statemebts
begin
    executable statements
exception
    exception-handling sttements
end;

解析:
create [or replace] trigger: 表示将创建或者替换一个触发器,如果没有写or replace则只会创建一个触发器,当数据库中已经有该触发器了,则新创建不会成功。

Ttrigger_name:触发器的名字

{before|after} Triggering_event on table_name:表示在table_name表上创建的触发器事件发生的前或者后,触发器会触发

Triggering_event:比如插入或者更新等操作,也可能是时间

[for each row]:表示行级触发器,是对每一行数据都会触发判断。若没有这一句,则是语句级触发器,一次触发只会执行一次

[enable/disable]:是触发器启用或禁用选项,默认是启用的,禁用触发器的例句:after trigger trigger_anme disable

follows :可以指定触发器的顺序

declare:后面是申明部分

beigin...end:中间是主体语句

exception后面抛出异常

a、删除一个表,表上的触发器也会一起被删除
触发器的一些作用:
a、执行不能通过使用完整性约束来定义的复杂业务规则
b、维护复杂的安全规则
c、自动生成衍生列的值
d、收集有关访问数据库表的统计信息
e、防止无效的事务
f、提供值审计
触发器不会执行事务控制语句,比如commit和rollback等,当触发器执行时,执行commit和rollback时,触发器也会被提交或者回滚

 例句:

1:

CREATE OR REPLACE TRIGGER forbid_emp_trigger
BEFORE INSERT OR DELETE OR UPDATE ON emp
DECLARE  
    v_currentweak VARCHAR(20);   
    v_currenthour VARCHAR(20);
BEGIN
    SELECT TO_CHAR(SYSDATE,'day'),TO_CHAR(SYSDATE,'hh24') 
    INTO v_currentweak, v_currenthour FROM dual ;  
    IF TRIM(v_currentweak)='星期一' OR TRIM(v_currentweak)='星期六' 
    OR TRIM(v_currentweak)='星期日' THEN   
    RAISE_APPLICATION_ERROR(-20008,'在周末及周一不允许更新emp数据表!') ;    
    ELSIF TRIM(v_currenthour)<'9' OR TRIM(v_currenthour)>'18' THEN    
    RAISE_APPLICATION_ERROR(-20009,'在下班时间不能够修改emp表数据!') ;   
    END IF;
END;

会判断当前日期,如果在周一、周末或者下班时间,不允许插入,删除,更新数据库数据 

2:

create or replace trigger tri_no_gzjiang
before update
on emp
declare
    var_data varchar2(20);
begin
    select to_char(sysdate,'hh24') into var_date from dual;
    if var_date > '12' then
        raise_application_error(-20009,'12点之后不能够修改emp表数据!');
    end if;
end;

3:

create or replace trigger CASCADE_DEL_UPD
before  update of deptno or delete
on dept
for each row
declare
begin
    if deleting  then 
        delete from emp where deptno=:old.deptno;  
    end if;  
    if updating then 
        update emp set deptno=:new.deptno 
        where deptno=:old.deptno;  
    end if;
end;

 

4: 

--创建一个视图
create or replace view view_emp_dept as
select empno,ename,dept.deptno,dname,job,hiredate
from emp ,dept
where emp.deptno = dept.deptno;
 
--插入记录
insert into view_emp_dept(empno,ename,deptno,dname,job,hiredate)
values (999,'ttgg',10,'ACCOUNTING','CASHIER',sysdate);
 
--插入数据失败,通过关联触发器来
--创建触发器
create or replace trigger tri_insert_view
instead of insert
on view_emp_dept
for each row
declare
    row_dept dept%rowtype;
begin
    select * into row_dept from dept where deptno=:new.deptno;
    if sql%notfound then
    insert into dept(deptno,dname) values(:new.deptno,:new.dname);
    end if;
    insert into emp(empno,ename,deptno,job,hiredate)
    values (:new.empno,:new.ename,:new.deptno,:new.job,:new.hiredate);
end;
--验证触发器
 
insert into view_emp_dept(empno,ename,deptno,dname,job,hiredate)
values (999,'ttgg',10,'ACCOUNTING','CASHIER',sysdate);
 
select * from view_emp_dept;

 

标签:触发器,dept,trigger,emp,new,deptno
From: https://www.cnblogs.com/chenbao1012/p/17165127.html

相关文章

  • 触发器
    触发器触发器电路结构及工作原理本节讨论另一种对脉冲边沿敏感的双稳态电路。如前所述,D锁存器在使能信号上为逻辑期间更新状态。在这期间,它的输出会随输人信号变化。而......
  • 触发器
    触发器触发器电路结构及工作原理本节讨论另一种对脉冲边沿敏感的双稳态电路。如前所述,D锁存器在使能信号上为逻辑期间更新状态。在这期间,它的输出会随输人信号变化。而......
  • 锁存器和触发器
    锁存器基本双稳态电路电路图如下:若Q=1,则电流在电路中流动后又进一步保证Q=1;反之亦然。故只要该电路进入了一个状态,他就会保持这个状态下去,具有存储的效果(当然,其没有控......
  • mysql触发器对于null值的处理
    mysql的触发器是不会对null值进行直接监控的,需要手动对于null值做处理这样处理null值就可以NEW.prom_priceisnotnullandOLD.prom_priceisnull......
  • mysql触发器使用教程-六种触发器
    参考:https://zhuanlan.zhihu.com/p/439273702触发器(Trigger)是MySQL中非常实用的一个功能,它可以在操作者对表进行「增删改」之前(或之后)被触发,自动执行一段事先写好的SQ......
  • (数据库系统概论|王珊)第五章数据库完整性-第四、六、七节:约束命名子句、断言和触发器
    ​​pdf下载:密码7281​​​​专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解​​一:完整性约束命名子句(CONSTRAINT)SQL中......
  • (数据库系统概论|王珊)第五章数据库完整性-第四、六、七节:约束命名子句、断言和触发器
    pdf下载:密码7281专栏目录首页:【专栏必读】(考研复试)数据库系统概论第五版(王珊)专栏学习笔记目录导航及课后习题答案详解一:完整性约束命名子句(CONSTRAINT)SQL中还提供了......
  • 7 个“能力触发器”让你的开发人员工作申请引人注目
    获得一份新的开发人员工作——无论您是该领域的老手还是新手——都与吸引力有关。您需要在应用程序中使用能够吸引人的材料。在申请者领域之外,必须有人注意到你。脱颖而......
  • 【MySQL-视图/存储过程/存储函数/触发器】
    零、本文纲要一、视图二、存储过程三、存储函数四、触发器tips:Ctrl+F快速定位到所需内容阅读吧。一、视图0、表&数据准备--新建表格createtabletb_test(idint......
  • SQL 查看触发器
    1)查看表中的触发器类型:sp_helptrigger:返回对当前数据库的指定表定义的DML触发器的类型。sp_helptrigger不能用于DDL触发器。EXECsp_helptrigger'表名'2)查看触......