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数据,在开发环境测试一些正常.项目部署到客户的服务器上后,系统在添加数据的时候报错.输出错误信息,发现是“超出最大长度”的异常. 但是按照数据库的设计,添加的数据应该在允许 ...
随机推荐
- 深入ES6中的class类
今天在学习vuex时,遇到了定义store类时的一种写法,就是在类中的方法使用箭头函数绑定this的问题时的一种操作,感觉写法有点陌生,遂深究一番,好了上代码 此处写commit中的地方,是为了绑定t ...
- webpack4.0构建项目流程
webpack4.0构建项目流程,具体的就不一一唠叨了,这里给出构建流程步骤: 流程大图: 下载高清大图
- shell之批量新增用户脚本(http-basic-auth)
user.txt(用户名记录文件) test001@.com test002@.com user.sh(shell脚本): for line in `cat user.txt` do echo $li ...
- docker时区问题
解决: dockerfile: RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime#update application timezoneR ...
- SpringBoot(十八):SpringBoot2.1.1引入SwaggerUI工具
Swagger是一个有用web界面的提供实体模型结构展示,接口展示,调测等的一个工具,使用它可以提高开发者开发效率,特别是前后端配合开发时,大大省去了沟通接口耗费的时间:服务端开发完接口发布后,UI端 ...
- 用Python实现一个简单的——人脸相似度对比
近几年来,兴起了一股人工智能热潮,让人们见到了AI的能力和强大,比如图像识别,语音识别,机器翻译,无人驾驶等等.总体来说,AI的门槛还是比较高,不仅要学会使用框架实现,更重要的是,需要有一定的数学基础 ...
- 蓝牙BLE: ATT和GATT的概念
BLE通信由两种设备类型构成—— Client和Server. Server提供数据服务,所以一般来说设备是Server,手机是Client.Server和Client通过ATT PDU进行交互,Se ...
- MongoTemplate进行增删改查
转载自:https://blog.csdn.net/sinat_35821285/article/details/83511203#commentBox 1.首先pom.xml <!-- spr ...
- Oracle 11g R2手动配置EM(转)
转自:http://blog.itpub.net/9034054/viewspace-1973418/ Oracle 11g R2手动配置EM Oracle 作者:luashin 时间:2016-01 ...
- 巧用List.stream()方法对List做处理
List.steam()的强大之处在此不做赘述. 直接进入主题: 1.过滤Bean List中,某些字段等于指定值的所有行 List<Member> list = itemsArray.t ...