Oracle中Before和After触发器的例子

摘要:
做一个表的insert的trigger,目的是只修改插入行的字段。

做一个表的insert的trigger,目的是只修改插入行的字段。

CREATE OR REPLACE TRIGGER TR_RME_SLOT
BEFORE INSERT ON RME_SLOT
FOR EACH ROW
BEGIN
IF (:NEW.POSITION >= 0 AND :NEW.POSITION <10) THEN
:NEW.SLOT_NAME := '0'||TO_CHAR(:NEW.POSITION);
ELSE
:NEW.SLOT_NAME := TO_CHAR(:NEW.POSITION);
END IF;
END;

在插入以前就需要修改插入行;在trigger实现中并不需要用到update语句

同时,如果要在trigger中实现对本表记录的修改,则需要这样写:

CREATE OR REPLACE TRIGGER TR_RME_SLOT
AFTER INSERT ON RME_SLOT
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF (:NEW.POSITION >= 0 AND :NEW.POSITION <10) THEN
UPDATE RME_SLOT SET SLOT_NAME = '0'||TO_CHAR(:NEW.POSITION) WHERE SLOT_ID=:NEW.SLOT_ID;
ELSE
UPDATE RME_SLOT SET SLOT_NAME = TO_CHAR(:NEW.POSITION) WHERE SLOT_ID=:NEW.SLOT_ID;
END IF;
COMMIT;
END;

注意多了一段DECLARE,同时在trigger结束时需要COMMIT

CREATE OR REPLACE TRIGGER tr_AfterUpdate
AFTER INSERT OR UPDATE
ON TEST_TRIGGER
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN

UPDATE TEST_TRIGGER
SET T_FACT = T_SALARY*(1-T_TAX)-T_EAT-T_HOUSE
WHERE T_NAME = :NEW.T_NAME;
COMMIT;

EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END tr_testUpdate;

免责声明:文章转载自《Oracle中Before和After触发器的例子》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇tcpdump抓包工具的使用python工业互联网监控项目实战4—python opcua下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JAVA通过Map拼接SQL语句(Insert Update语句)

packagecom.lynch.erp.core.util; importjava.util.Map; importorg.apache.commons.collections.MapUtils; importorg.apache.commons.lang3.StringUtils; public classSQLUtils {...

mysql开发总结

一、理解MySQL基本概念   1、MySQL软件:MySQL实际上就是一软件,是一工具,是关系型数据库管理系统软件   2、MySQL数据库:就是按照数据结构来组织、存储和管理数据的仓库   3、MySQL数据库实例:     ①MySQL是单进程多线程(而oracle是多进程),也就是说MySQL实例在系统上表现就是一个服务进程,即进程;     ②M...

Mysql----浅入浅出之视图、存储过程、触发器

一、视图 VIEW 视图是虚拟的表,本身不存储不论什么数据。仅仅有执行时,才包括动态检索出来的数据。 eg:SELECT sid, name, sex, s_num FROM  student, school WHERE sid = 2 AND student.sid = scholl.sid ; 这个简单的查询涉及到两个表。 所以不论什么须要这个数据的...

Clock Skew , Clock Uncertainty和 Period

本文将介绍FPGA中和时钟有关的相关概念,阅读本文前需要对时序收敛的基本概念和建立、保持关系有一定了解,这些内容可以在时序收敛:基本概念,建立时间和保持时间(setup time 和 hold time)中找到。 系列目录      时序收敛:基本概念     建立时间和保持时间(setup time 和 hold time)     OFFSET约束(...

ubuntu下jdk的安装

ubuntu 安装jdk 的两种方式: 1:通过ppa(源) 方式安装. 2:通过官网下载安装包安装. 这里推荐第1种,因为可以通过 apt-get upgrade 方式方便获得jdk的升级 1.使用ppa/源方式安装 1.添加ppa sudo add-apt-repository ppa:webupd8team/java sudo apt-get up...

svn基本命令使用

1、svn help:可以通过该命令查看svn的所有操作命令,包括命令的缩写 2、首先需要从svn库中checkout对应的项目:  (1)svn项目路径为svn://192.168.1.1/myproject/doc,将项目路径下的文件checkout到/home/test目录下,若没有/home/test路径会自动创建,同时只将doc中的子目录和文件...