前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ORACLE语句级触发器的实现

ORACLE语句级触发器的实现

作者头像
overme
发布2022-01-15 12:17:35
5350
发布2022-01-15 12:17:35
举报
文章被收录于专栏:数据开发笔记

Oracle

语句级触发器的实现

语句级触发器,顾名思义,就是针对一条DML语句而引起的触发器执行,在语句级触发器中不使用for each row子句,也就是说无论数据操作影响多少行,触发器都只会执行一次。

创建测试表
代码语言:javascript
复制
create table test_dml(
rec_id int,
rec_test varchar2(20),
rec_test1 varchar2(20)  
);
create table test_trigger (
options  varchar2(30),
times  date
);
创建一个触发器
代码语言:javascript
复制
CREATE OR REPLACE TRIGGER TRI_TEST
  BEFORE INSERT OR UPDATE OR DELETE ON TEST_DML
DECLARE
  VAR_TAG VARCHAR2(20);
BEGIN
  IF INSERTING THEN
    VAR_TAG := '插入';
  ELSIF UPDATING THEN
    VAR_TAG := '修改';
  ELSIF DELETING THEN
    VAR_TAG := '删除';
  END IF;
  INSERT INTO TEST_TRIGGER (OPTIONS, TIMES) VALUES (VAR_TAG, SYSDATE);
END TRI_TEST;

往表中分别插入、修改、删除数据

代码语言:javascript
复制
INSERT INTO TEST_DML (REC_ID, REC_TEST) VALUES (1, '插入一条语句');
UPDATE TEST_DML T SET T.REC_ID = 2 WHERE T.REC_ID = 1;
DELETE TEST_DML T WHERE T.REC_ID = 2;
COMMIT;

查询触发器TRI_TEST的测试表

代码语言:javascript
复制
select * from  TEST_TRIGGER t;

已经记录了三条DML语句

对于条件我们还可以判断其中特定的列是否被更新

现在我们修改触发器
代码语言:javascript
复制
CREATE OR REPLACE TRIGGER TRI_TEST
  BEFORE UPDATE ON TEST_DML
DECLARE
  VAR_TAG VARCHAR2(20);
BEGIN
  IF UPDATING('REC_ID') THEN
    VAR_TAG := '修改REC_ID字段';
  ELSIF UPDATING('REC_TEST') THEN
    VAR_TAG := '修改REC_TEST字段';
   ELSE
    VAR_TAG := '修改其他字段';
  END IF;
  INSERT INTO TEST_TRIGGER (OPTIONS, TIMES) VALUES (VAR_TAG, SYSDATE);
END TRI_TEST;

修改字段

代码语言:javascript
复制
UPDATE TEST_DML T SET T.REC_ID = 2 WHERE T.REC_ID = 1;
UPDATE TEST_DML T SET T.REC_TEST = 'REC_TEST字段' ;
UPDATE TEST_DML T SET T.REC_TEST1 = '其他字段' ;
COMMIT;

查询触发器TRI_TEST的测试表

代码语言:javascript
复制
select * from  TEST_TRIGGER t order by times desc;

发现更新特定的行也能被判断。

本站文章除注明转载/出处外,均为本站原创,转载前请务必署名,转载请标明出处

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/08/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 语句级触发器的实现
    • 创建测试表
      • 创建一个触发器
        • 现在我们修改触发器
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档