oracle 数据库触发器,插入更新时间戳
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 数据库触发器,插入更新时间戳的更多相关文章
- 向Oracle数据库中插入数据出错:ORA-01036 无效的变量名或数据
		向Oracle数据库中插入数据出错: 经过排查,因为Update数据时没有出错,所以OracleHelper没有问题: 看异常信息提示:无效的变量和数据,应该是SQL语句的问题,调试时所传的实例Use ... 
- Oracle数据库中插入日期型数据(to_date的用法)(转载)
		往Oracle数据库中插入日期型数据(to_date的用法) INSERT INTO FLOOR VALUES ( to_date ( '2007-12-20 18:31:34' , 'YYY ... 
- SQL语句往Oracle数据库中插入日期型数据(to_date的用法)
		Oracle 在操作数据库上相比于其他的 T-sql 有微小的差别,但是在插入时间类型的数据是必须要注意他的 to_date 方法,具体的情况如下: --SQL语句往Oracle数据库中插入日期型数据 ... 
- Oracle数据库——触发器的创建与应用
		一.涉及内容 1.理解触发器的概念.作用和类型. 2.练习触发器的创建和使用. 二.具体操作 (实验) 1.利用触发器对在scott.emp表上执行的DML操作进行安全性检查,只有scott用户登录数 ... 
- oracle数据库触发器(trigger)用法总结
		from:http://blog.csdn.net/zhanzhib/article/details/48729417 触发器的意思就是当我们对数据库对象(一般是表或视图)进行insert.updat ... 
- 常用的Oracle数据库语句 (待更新完毕)
		一.常用的查询语句 1.1 常用查询 查表中有多少个字段 select count(*) from user_tab_columns where table_name=upper('表名') 或者 s ... 
- 解决getJdbcTemplate往oracle数据库中插入数据返回主键出错问题
		我们使用Spring中的JdbcDaoSupport往Mysql中插入数据并返回主键代码,我们使用的mysql数据库,主键在数据库中设置为自增长:该类继承自JdbcDaoSupport,所以能直接使用 ... 
- ORACLE数据库测试数据插入速度[z]
		一,没有优化的速度:Executed in 69.436 seconds drop table t purge;create table t(x int);/*清空共享池,注意在生产环境中千万不能做这 ... 
- Oracle数据库触发器使用(删除触发)
		当我们需要用到触发器的时候,还是很方便,你会指定当我在操作某一事件时触发效果完成我所希望完成的事情:这就是触发器, 下面我给大家上一串代码,这是一个当我在操作删除事件操作时候,我希望把即将删除那条数据 ... 
- 客户Oracle数据库在插入数据的时候报超出最大长度的错误(规避风险)
		背景: 项目使用oracle数据,在开发环境测试一些正常.项目部署到客户的服务器上后,系统在添加数据的时候报错.输出错误信息,发现是“超出最大长度”的异常. 但是按照数据库的设计,添加的数据应该在允许 ... 
随机推荐
- 运行虚拟机报错:CPU acceleration status: HAXM is not installed on this machine
			运行虚拟机报错:CPU acceleration status: HAXM is not installed on this machine. 这是因为SDKmanage没有安装HAXM ,于是打开S ... 
- Flink入门介绍
			什么是Flink Apache Flink是一个分布式大数据处理引擎,可以对有限数据流和无限数据流进行有状态计算.可部署在各种集群环境,对各种大小的数据规模进行快速计算. Flink特性 支持高吞吐. ... 
- jenkins使用--安装文档
			添加Jenkins的源(repository): #sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/je ... 
- Presto: SQL on Everything
			Presto是FB开源出来的实时分析引擎,可以federated的从多种数据源去读取数据,做联合查询,支持实时Interactive BI或bath ETL的需求 从其问题域来看,基本是和spark是 ... 
- Rose与PowerDesigner:两款UML建模工具的对比
			声明 本文转载自:Rose与PowerDesigner:两款UML建模工具的对比 正文 本文和大家重点讨论一下Rose与PowerDesigner:两款UML建模工具的对比,Rose和PowerDes ... 
- android gradle使用阿里源
			使用阿里源 新建一个init.gradle 文件到$USER_HOME/.gradle/目录下,这们就省的翻墙了. init.gradle 文件内容如下: allprojects { reposito ... 
- 【GMT43智能液晶模块】例程二十二:USB_HID实验——双向数据传输
			源代码下载链接: 链接:https://pan.baidu.com/s/1iSAUQnHoLI3WRPm-DimeSA 提取码:69vp 复制这段内容后打开百度网盘手机App,操作更方便哦 GMT43 ... 
- 卷积神经网络概念及使用 PyTorch 简单实现
			卷积神经网络 卷积神经网络(CNN)是深度学习的代表算法之一 .具有表征学习能力,能够按其阶层结构对输入信息进行平移不变分类,因此也被称为“平移不变人工神经网络”.随着深度学习理论的提出和数值计算设备 ... 
- 原生微信小程序脚手架(支持npm)
			微信小程序支持npm 为了支持生态扩展,社区贡献者可以提供更加丰富的功能,已经支持了第三方小程序开发功能,见如下地址. 微信小程序支持npm https://developers.weixin.qq. ... 
- promise简单实现
			function isFunction(fn){ return Object.prototype.toString.call(fn) === '[object Function]'; } let ST ... 
