拓扑园

  • O&M
    • Universal部署
    • PHP+VUE+Laravel相关
  • Oracle性能优化
  • Oracle项目案例
    • Oracle近期项目案例(目录)
    • Oracle实战问题解析(目录)
    • Oracle数据库名变更流程(2种方式)
    • Oracle数据库目录更换流程(使用Oracle的clone工具)
    • Oracle数据库迁移方案(目录)
    • 标准化文档系列
  • Oracle基础知识
    • LLL的Oracle培训(分类)
    • LLL的docker培训(分类)
    • 标准化文档系列--(分类)
    • Oracle核心经典分析(分类)
    • 图灵小队----(分类并包含以下文章)
    • --MySQL8.0/Oracle/Memcached/Redis等安装配置于RHEL/OL6/7/8.X系列-运行环境最优配置
    • --PG安装配置于RHEL/9X系列-运行环境最优配置
    • --自动维护任务详解-开启、关闭信息统计收集(统计信息)
    • --图灵小队—Oracle/PostgreSQL下创建一个用户测试表(自行定义数据行)
    • --图灵小队-Oracle存储过程导出表的明细_UTL_FILE(文章)
    • --图灵小队-Oracle数据库删除/卸载操作指南(文章)
    • --图灵小队-Oracle常用性能查询SQL语句(文章)
    • --图灵小队-Oracle数据库上线前检查(文章)
    • --图灵小队-Oracle常用SQL语句(文章)
    • --图灵小队—Linux/Oracle脚本/MySQL合集(持续更新)
    • --图灵小队-Oracle技巧记录(文章)
    • ADG
    • RAC
    • ASM
    • OGG
    • RMAN
    • EXPDP/IMPDP
    • 工厂数据导入导出系列
  • MySQL
    • MySQL数据库规范
    • MySQL项目案例
    • MySQL安装配置
    • MYSQL集群项目
    • MySQL常见处理
    • MySQL-Sysbench专题
    • MySQL-Percona Toolkit专题
  • Linux
    • Shell编程
    • kubernetes
    • docker
    • Linux
    • PHP
    • Nginx
    • haproxy
    • mail
    • 网站
    • 域名
    • 网址收藏
  • 数据中心
    • 新框架系统集合
    • 工作文档
    • EBS数据文件扩容
    • VMware虚拟化
    • EBS系列
    • 大数据
    • SVN
    • zabbix
    • SAP
    • 备份相关
    • FC交换机
    • SVN
  • K-Studing
    • D8-Python学习
    • Oracle/MySQl等面试题
    • LG-MySQL
    • LG-Docker/K8S
    • LG-PostgreSQL
    • LG-ORACLE_BBED
    • LG-ORACLE
    • LG-Elasticsearch(ES)+ELK
    • Oracle-19C-OCP
    • WERN_ORACLE培训
    • redis数据库
    • Nginx培训学习系列
  • 其他
    • 外研英语4年级下册-听力
    • 影视系列
    • 如何使用iTunes软件通过抓包下载旧版本的ios的app
天高任鸟飞
Oracle/MySQL数据库恢复/数据迁移/生产规范报告技术交流:TEL:18562510581(微信同号);加微信入群
  1. 首页
  2. Oracle基础知识
  3. LLL的Oracle培训
  4. 正文

第91期培训-第五部分—Oracle11g-Oracle SQL对象管理—第18讲—触发器

2023年12月16日 841点热度 0人点赞 0条评论

目录

  • 一、触发器的概念
    • 1、触发器的概念
    • 2、触发器的语法
    • 3、触发器案例
    • 4、触发器的注意事项:
    • 5、触发器的优点:
    • 6、触发器的缺点:
  • 二、触发器的应用案例
    • 1、案例要求
    • 2、实现步骤
      • (1)我们需要创建一个 audit_log 表来存储审计日志:
      • (2)我们可以创建一个触发器来实现审计日志的记录:
    • 3、实现结果

第91期培训-第五部分—Oracle11g-Oracle SQL对象管理—第18讲—触发器

一、触发器的概念

1、触发器的概念

触发器是 Oracle SQL 中的一种数据库对象,它在满足特定条件时自动触发指定的操作。

触发器可以用于在数据库发生特定事件时执行预定义的操作,例如在插入、更新或删除数据时触发其他操作或检查数据的完整性约束。

2、触发器的语法

CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER | INSTEAD OF} {INSERT | UPDATE | DELETE} [OF column_name]
ON table_name [FOR EACH ROW]
[WHEN (condition)]
[DECLARE
-- 声明局部变量
BEGIN
-- 触发操作
END;]

CREATE OR REPLACE TRIGGER   用于创建或替换触发器。
BEFORE、AFTER、INSTEAD OF   指定触发时机,BEFORE 表示在触发事件之前执行,AFTER 表示在触发事件之后执行,INSTEAD OF 表示在代替触发事件时执行(通常用于视图)。
INSERT、UPDATE、DELETE      指定触发事件的类型。
OF column_name             可选,指定列名称,限制触发事件为指定列的变化。
ON table_name              指定触发器所属的表名。
FOR EACH ROW               指定触发器为行级触发器,对于每一行的变化都会触发。
WHEN (condition)           可选,指定触发条件。
DECLARE 和 BEGIN/END       之间可以定义局部变量或声明其他过程、函数等。

3、触发器案例

update_customer_total 触发器会在每次插入新的订单数据时被触发。它会更新 customers 表中对应客户的 total_order_amount 列,增加新插入订单的金额。

CREATE OR REPLACE TRIGGER update_customer_total
AFTER INSERT ON orders
FOR EACH ROW
BEGIN
UPDATE customers
SET total_order_amount = total_order_amount + :new.order_total
WHERE customer_id = :new.customer_id;
END;

4、触发器的注意事项:

--触发器应遵循数据库的完整性和业务规则。
--触发器可能会对性能产生影响,特别是在处理大量数据时。
--注意触发器的执行顺序,避免出现循环触发的问题。

5、触发器的优点:

--实现数据完整性约束和业务逻辑的自动执行。
--提供了一种简洁的方式,用于在特定条件下自动触发操作。

6、触发器的缺点:

--触发器可能增加数据库的复杂性,难以维护和调试。
--不恰当或过多的触发器可能导致性能下降。
--对于复杂的逻辑,使用触发器可能不如使用存储过程或应用程序来处理更清晰和有效。

二、触发器的应用案例

1、案例要求

假设有一个 employees 表和一个 audit_log 表,我们希望在 employees 表中的数据更新时,自动将修改的信息插入到 audit_log 表中,以便记录操作的历史。

2、实现步骤

(1)我们需要创建一个 audit_log 表来存储审计日志:

sql
CREATE TABLE audit_log (
log_id NUMBER,
action_date TIMESTAMP,
employee_id NUMBER,
old_salary NUMBER,
new_salary NUMBER
);

(2)我们可以创建一个触发器来实现审计日志的记录:

sql
CREATE OR REPLACE TRIGGER employee_audit_trigger
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO audit_log (log_id, action_date, employee_id, old_salary, new_salary)
VALUES (audit_log_seq.NEXTVAL, SYSTIMESTAMP, :old.employee_id, :old.salary, :new.salary);
END;

3、实现结果

在上述案例中,employee_audit_trigger 触发器会在每次更新 employees 表中的数据时被触发。它会将更新前后的工资信息记录到 audit_log 表中,以便日后审计和查询。

这个触发器会在每次更新 employees 表中的记录时自动执行插入操作,将旧的和新的工资信息存储在 audit_log 表中。

这个案例展示了一个常见的触发器应用,用于在数据更新时实现审计和历史记录。通过触发器,我们可以确保每次更新操作都会被跟踪和记录,以便后续审查和分析。

需要注意的是,触发器的实际应用可能更复杂,取决于具体的业务需求和数据模型。因此,在使用触发器时,应根据实际情况进行设计和调整,以实现所需的功能和性能。

 

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2023年12月16日

admin

这个人很懒,什么都没留下

打赏 点赞
< 上一篇
下一篇 >

COPYRIGHT © 2022 拓扑园. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

鲁ICP备2021020523号

鲁ICP备2021020523号