1、首先建立一个测试表

CREATE TABLE TestTragger(
UserId int Primary Key,
Name VARCHAR() Not Null,
CreateTime Timestamp Not Null
);

创建索引:(用于UserId主键自增)

一、old和new在Oracle中不区分大小写;

二、old和new可以用在declare中也可以用在begin里的sql语句;(只会在begin中的sql语句里用)

三、old表示插入之前的值,new表示新插入的值。

四、new 只出现在insert和update时,old只出现在update和delete时。在insert时new表示新插入的行数据,update时new表示要替换的新数据、old表示要被更改的原来的数据行,delete时old表示要被删除的数据。

四、for each row      --行级触发器,一般表记的会报错,没有深入研究

CREATE OR REPLACE TRIGGER MYUSAP                          //创建或替换 名称为MYUSAP的触发器
before INSERT OR UPDATE ON TestTragger //新增和修改执行前出发,对象目标:TestTragger表
FOR EACH ROW //行级触发器,每影响一行触发一次
BEGIN
IF INSERTING THEN //插入数据操作
:NEW.createtime := SYSDATE;
ELSIF UPDATING then //修改数据操作
:NEW.createtime := SYSDATE;
END IF;
END;

创建序列:

create sequence TESTTRAGGER_SQUENCE
INCREMENT BY -- 每次加几个
START WITH -- 从1开始计数
NOMAXVALUE -- 不设置最大值
NOCYCLE -- 一直累加,不循环
CACHE ;

测试插入和修改数据:

insert into testtragger(userid,name) values(TESTTRAGGER_SQUENCE.Nextval,'李四');   //插入数据
select userid,name, createtime, to_char(createtime,'yyyy-mm-dd hh:mm:ss') from testtragger; //查询数据
update testtragger set name='李四' where userid = ; //修改数据

效果图:先查询现有的数据

然后执行修改操作:update testtragger set name='王五' where userid = 2;

修改完名称,时间戳也更新到了最新修改的时间。

注意,sysdate是精确到秒的时间戳,这个一般在粗略记录修改人的时候使用,

但是当我们是用来进行版本控制,我们需要很高的精确度,此时应该用毫秒级的时间戳:systimestamp

把触发器中的:sysdate改为systimestamp

效果展示:

其实这里主键id也是可以在触发器中进行的,代码如下:

insert into testtragger(name) values('阿斯玛3');

select userid,name, createtime, to_char(createtime,'yyyy-mm-dd hh24:mi:ssxff') from testtragger order by createtime ;

create sequence seq_testTragger_id start with ;--创建一个序列从1开始
CREATE OR REPLACE TRIGGER MYUSAP
before INSERT OR UPDATE ON TESTTRAGGER FOR EACH ROW
BEGIN
IF INSERTING THEN --插入数据操作
select seq_testTragger_id.nextval into :new.UserId from dual; --:new新值 :old老值
:NEW.UserId := seq_testTragger_id.currval; --新增时为UserId赋值,利用序列自增,(oracle不支持 AUTO_INCREMENT,)
:NEW.createtime := systimestamp;
ELSIF UPDATING then --修改数据操作
:NEW.createtime := systimestamp;
END IF;
END; DROP TRIGGER MYUSAP; --删除触发器 DROP SEQUENCE seq_testTragger_id; --删除序列 DELETE FROM TESTTRAGGER; --清空表

执行顺序和实例效果:

oracle 数据库触发器,插入更新时间戳的更多相关文章

  1. 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据

    向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ...

  2. Oracle数据库中插入日期型数据(to_date的用法)(转载)

    往Oracle数据库中插入日期型数据(to_date的用法) INSERT  INTO  FLOOR  VALUES  ( to_date ( '2007-12-20 18:31:34' , 'YYY ...

  3. SQL语句往Oracle数据库中插入日期型数据(to_date的用法)

    Oracle 在操作数据库上相比于其他的 T-sql 有微小的差别,但是在插入时间类型的数据是必须要注意他的 to_date 方法,具体的情况如下: --SQL语句往Oracle数据库中插入日期型数据 ...

  4. Oracle数据库——触发器的创建与应用

    一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数 ...

  5. oracle数据库触发器(trigger)用法总结

    from:http://blog.csdn.net/zhanzhib/article/details/48729417 触发器的意思就是当我们对数据库对象(一般是表或视图)进行insert.updat ...

  6. 常用的Oracle数据库语句 (待更新完毕)

    一.常用的查询语句 1.1 常用查询 查表中有多少个字段 select count(*) from user_tab_columns where table_name=upper('表名') 或者 s ...

  7. 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题

    我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ...

  8. ORACLE数据库测试数据插入速度[z]

    一,没有优化的速度:Executed in 69.436 seconds drop table t purge;create table t(x int);/*清空共享池,注意在生产环境中千万不能做这 ...

  9. Oracle数据库触发器使用(删除触发)

    当我们需要用到触发器的时候,还是很方便,你会指定当我在操作某一事件时触发效果完成我所希望完成的事情:这就是触发器, 下面我给大家上一串代码,这是一个当我在操作删除事件操作时候,我希望把即将删除那条数据 ...

  10. 客户Oracle数据库在插入数据的时候报超出最大长度的错误(规避风险)

    背景: 项目使用oracle数据,在开发环境测试一些正常.项目部署到客户的服务器上后,系统在添加数据的时候报错.输出错误信息,发现是“超出最大长度”的异常. 但是按照数据库的设计,添加的数据应该在允许 ...

随机推荐

  1. lintcode-828. 字模式

    题目描述: 828.字模式 给定一个模式和一个字符串str,查找str是否遵循相同的模式.这里遵循的意思是一个完整的匹配,在一个字母的模式和一个非空的单词str之间有一个双向连接的模式对应. 样例 给 ...

  2. 前端微服务初试(singleSpa)

    1.基本概念 实现一套微前端架构,可以把其分成四部分(参考:https://alili.tech/archive/11052bf4/) 加载器:也就是微前端架构的核心,主要用来调度子应用,决定何时展示 ...

  3. 安装ubuntu 16.04版本时搭建环境参考的文章

    重新编译的命令:make all ZIP_DEBUGINFO_FILES=0 DISABLE_HOTSPOT_OS_VERSION_CHECK=ok 解决ubuntu中vi不能正常使用方向键与退格键的 ...

  4. 拼多多面试真题:如何用 Redis 统计独立用户访问量!

    阅读本文大概需要 2.8 分钟. 作者:沙茶敏碎碎念 众所周至,拼多多的待遇也是高的可怕,在挖人方面也是不遗余力,对于一些工作 3 年的开发,稍微优秀一点的,都给到 30K 的 Offer. 当然,拼 ...

  5. 访问者模式(Visitor Patten)

    参考文章: http://www.importnew.com/15561.html 定义: 封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作. um ...

  6. FZU Monthly-201906 获奖名单

    FZU Monthly-201906 获奖名单 冠军: 空缺 一等奖: 陈金杰 S031702334 空缺 二等奖: 黄海东 S031702647 吴宜航 S031702645 蔡煜晖 S111801 ...

  7. AttributeError: 'builtin_function_or_method' object has no attribute 'reshape'

    AttributeError: 'builtin_function_or_method' object has no attribute 'reshape' 读取.mat文件时,copy没加括号

  8. Net core学习系列(九)——Net Core配置

    一.简介 NET Core为我们提供了一套用于配置的API,它为程序提供了运行时从文件.命令行参数.环境变量等读取配置的方法.配置都是键值对的形式,并且支持嵌套,.NET Core还内建了从配置反序列 ...

  9. 内存映射文件MappedByteBuffer和Buffer的Scattering与Gathering

    上一篇讲到的DirectByteBuffer继承自MappedByteBuffer 一.MappedByteBuffer MappedByteBuffer的定义: A direct byte buff ...

  10. Linux CentOS7 下无图形界面安装Oracle11G R2版本

    01,系统 Centos7 数据库版本 Oracle_11gR2 ,以及硬件要求 内存不能小于 1G,可用硬盘不小于8G Swap分区空间不小于2G grep MemTotal /proc/memin ...