• Oracle触发器的用途


    0.DDL和DML

    DDL:data manipulation language,数据操作语言,主要命令有select,update,insert,delete,主要用于对数据库中的数据进行操作

    DDL:data definition language,数据定义语言,主要命令有create,alter,drop,主要用于定义和修改表

    DCL:data contral language,数据控制语言,主要命令有grant,rollback,commitdeng,主要用于授权或收回访问数据库的某种权限,并控制数据库操事务发生的时间及效果,对数据库进行监视。

    1.触发器的用途

    (1)完成表的变更校验,当表中的数据发生insert、update或者delete等DML操作时,提供验证逻辑,验证更改数据的正确性、检查完整性约束、记录事件日志等。

    (2)自动数据库维护,使用系统级的触发器,可以在数据库系统启动或者退出时,通过触发器完成系统初始化和清楚操作。

    (3)控制数据库管理活动,使用触发器精细管理和控制数据库中的数据库管理活动,若删除或修改表等DDL操作,保证DDL操作的检查。

    2.触发器的分类

    根据触发的实际和影响的行数,可以分为4类

    • 行触发器和语句触发器
    • before触发器和after触发器
    • instead of触发器
    • 系统事件触发器和用户事件触发器,数据库启动,服务器错误消息事件触发属于系统事件;用户登录或退出,执行DDL或DML语句属于用户事件

     根据触发器所创建的语句及影响的对象不同,可分为3类

    • DML触发器,表的增、删、改,可以是行触发器、语句触发器、before触发器、after触发器
    • 系统触发器,对数据库实例活某个用户模式进行操作时的触发器,可以使数据库系统触发器和拥护触发器
    • 替代触发器,对视图进行操作时定义的触发器

    3.触发器的写法

    CREATE [OR REPALCE] TRIGGER trigger_name

    [BEFORE | AFTER | INSTEAD OF] triggering_event

    [referencing_clause]

    [WHEN trigger_condition]

    [FOR EACH ROW]

    trigger body

    • trigger_name:触发器的名称
    • triggering_event:引发触发器的事件,如对一个表或视图进行DML操作
    • referencing_clause:替换名字用
    • trigger_condition:用来指定触发的条件,当触发器定义中包含WHEN语句时,将先求值,当值为True时,才执行触发器
    • FOR EACH ROW:指定该字句表示创建的是行级的出尕其,否则创建的是语句级的触发器
    • trigger_body:指定触发器的执行代码区,是一个标准的PL/SQL块。

    触发器代码不能超过32KB,过大时分隔为多个存储过程,使用CALL调用存储过程。

    触发器代码只能包含DML语句,不能包含DDL语句。 

    4.具体实践

    (1)限制对表的更新修改

    (2)实现表的自动更新

    (3)提供日志记录

    附:

     

     

    主要是学习Oracle PL/SQL从入门到精通这本书的总结和实践

  • 相关阅读:
    使用机器学习做医学图像分类的开源项目集锦
    解读OpenShift的逻辑架构和技术架构
    高薪程序员&面试题精讲系列140之你熟悉分布式事务吗--下篇?有哪些分布式事务实现方案?
    C/C++ C语言 C++语言 当一个文件会和很多个编译单元一起编译时,而这个文件又引用了某些编译单元内独有的函数、全局变量,怎么办?
    数组的定义与使用
    led学生台灯哪个品牌好?2022学生台灯品牌排行榜
    牛顿迭代法求平方根--C++简单实现
    详解c++----类和对象(二)
    怎么实现批量文本txt转音频wav
    一个奇葩的线上问题,导致我排查了一天!
  • 原文地址:https://blog.csdn.net/linnge/article/details/121402055