最近需要在oracle中添加一张表TEST_A,用于存储一些管理数据,主要的字段如下:
TAG,OBJ_ALIAS字段和OBJ_NAME这三个字段为必填内容,
插入数据时ID自增,CREATEDON、LAST_UPDATED_ON自动填入数据插入时的时间,ROWSTAMP为0,表示数据修改次数。数据被更新时,LAST_UPDATED_ON 变为修改数据时的时间,ROWSTAMP字段值 +1表示该行数据被修改了一次。
因此,定义了如下触发器:
CREATE OR REPLACE trigger OP_OBJ_MAPPING_TR
BEFORE INSERT OR UPDATE ON OP_OBJ_MAPPING FOR EACH ROW
BEGIN
IF INSERTING THEN
:NEW.ID := OP_OBJ_MAPPING_SEQ.NEXTVAL;
ELSIF UPDATING then
:NEW.LAST_UPDATED_ON := SYSDATE;
:NEW.ROWSTAMP := :OLD.ROWSTAMP + 1;
END IF;
END;
相关解释:
OP_OBJ_MAPPING | 表名称 |
OP_OBJ_MAPPING_TR | 触发器名称 |
OP_OBJ_MAPPING_SEQ | 递增序列名称,步长1 |
OP_OBJ_MAPPING_SEQ.NEXTVAL | 取序列的下一个值 |
FOR_EACH_ROW | 行触发器,针对单行数据变动,触发行为 |
:NEW | 这里指将要插入的一行数据 |
:OLD | 这里指被修改前的数据行 |