oracle通过触发器自动更新表的修改时间
Oracle通过触发器自动更新表的修改时间
在mysql里,我们通常在创建表时会设置一个创建时间(create_time)和一个修改时间(update_time),然后给创建时间设置默认值CURRENT_TIMESTAMP
,给修改时间设置默认值CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,这样就能让创建时间和修改时间在插入数据时自动插入当前时间,而在修改数据时,自动更新修改时间。
而在Oracle中我们可以通过给创建时间和修改时间设置默认值为sysdate
,但是,却不能给修改时间设置为在修改数据时自动更新修改时间。
这个时候就需要用到触发器了。定义一个触发器,当修改表中的数据时,让触发器去更新修改时间。
我的数据库里有一张表叫做students
,其中有一列叫做update_time
,如下图所示:
下面是触发器的代码。
create or replace trigger trig_students_auto_update_time
before
update on students
for each row
beginselect sysdate into :NEW.update_time from dual;
end;
这样一个随着修改表中数据而自动更新修改时间的触发器就写好了。
最后,说一下我开始写的错误的触发器以及问题。
-- 错误示例
create or replace trigger trig_students_auto_update_time
after
update of update_time on students
for each row
beginselect sysdate into :NEW.update_time from dual;
end;/
第一,我在end;
的后面还加上了一个斜杠/
,我以为/
斜杠是最后的结束符,这导致我在创建好之后,执行修改语句的时候报错:触发器 无效且未通过重新验证。这个时候在plsql developer工具里面是可以看到触发器那里报错的,点到触发器里面去看一下,它会有相应的提示的。如下图所示
第二个问题是因为我用到了:new
的变量值,而这个值在after
的时候只能读。关于before和after的区别可以参考这篇文章
https://www.cnblogs.com/zzwlovegfj/archive/2012/07/05/2578574.html
第三,就在我上面的问题都解决了,以为要迎来光明的时候,在执行修改语句的时候发现这条数据的修改时间还是没有改变,然后看了下触发器,也没有显示错误啊。之后发现是因为我在触发器里面写了update of update_time
的原因。这句话的意思是当修改了update_time
字段的时候才会触发该触发器。把of update_time
给去掉就好了。
以上问题,都是源于一个连触发器都没太弄明白就想写自动更新表的修改时间的触发器的渣渣。看触发器语法的时候感觉不难,结果写起来就不是那么回事了。
最最后,附上某培训机构关于触发器的ppt的截图。
oracle通过触发器自动更新表的修改时间相关推荐
- Oracle Study案例之--基于表空间的时间点恢复(TSPITR)
Oracle Study案例之--基于表空间的时间点恢复(TSPITR) TSPITR(表空间时间点恢复)用于将一个或多个表空间恢复到过去某个时间点的状态,而其他表空间仍然保持现有状态. TSPIT ...
- MySQL查看表数据修改时间
MySQL查看表数据修改时间 SELECT * FROM information_schema.tables WHERE table_schema = '数据库名' AND table_name = ...
- oracle中触发器只能用于表吗,Oracle触发器的分类和使用
Oracle触发器的分类和使用 摘要:在Oracle中,触发器是一种特殊的存储过程,它在发生某种数据库事件时由Oracle 系统自动触发.触发器通常用于加强数据的完整性约束和业务规则等,对于表来说,触 ...
- win11系统时间自动更新失败,win11时间不对
更新win11后不久,突然有一天发现时间不对,网上查了很多教程,也无法自动更新时间. 特别是连接学校网线的时候,手动点击立即同步时间也无法同步,显示同步失败.但是连接学校WiFi的时候又是可以手动同步 ...
- oracle修改查询结果,Oracle使用查询结果更新表的方法
Oracle使用一个查询的结果更新另一个表的数据. 模拟实验如下,使用t2表的查询结果,更新t1表相同id的数据. drop table t1; drop table t2; create table ...
- 触发器代码(更新表A数据自动更新表B字段列)
表A ================= id 字段名 1 ft1 2 ft2 表B ================= ...
- Oracle 用拼接字符串更新表 测试
先看我们的数据: SQL> select count(1) from dave where cust_tel like '0551%'; COUNT(1) ---------- 2723 在我们 ...
- oracle怎么批量执行tdl文件,ORACLE no1 存储过程插入更新表数据
CREATE OR REPLACE PROCEDURE sp_cust_main_data_yx(InStrDate IN VARCHAR2, OS_ERR_MSG OUT VARCHAR2) AS ...
- php怎么让时间自动更新,php怎么实现时间增加
php怎么实现时间增加 php实现时间增加的方法:首先通过"date_default_timezone_set"设置默认时区:然后通过"strtotime('+1 day ...
最新文章
- [置顶] Objective-C ,ios,iphone开发基础:命名规范
- 一个例子来使用sklearn中的TfidfVectorizer
- Enumerator a Composite Structure
- 什么是mini GBIC,mini GBIC与SFP光模块有什么区别?
- mysql获取当月数据_MySQL中获取天、周、月等数据
- quit推不出mysql_cmd下使用mysql插入中文出现无法退出语句的情况!终极解决办法! 安装mysql详细教程。...
- 编程语言是从哪蹦出来的——大型伦理寻根现场
- java jdk实现快速排序_Java实现快速排序过程分析
- 蓝桥杯基础练习字母图形
- 锋利的jQuery-4--图片切换的一个例子(自己理解后写的,以备忘记时看看)
- shopnc数据库 批量修改商品价格
- Linux系统下init进程的前世今生
- android设置自动亮度,Android设置屏幕亮度
- 诗词温习集:跟梁瀚文一起重温诗词(宋词)之《雨霖铃.寒蝉凄切》宋.柳永
- 服务器上部署java项目
- 文件操作命令 cp、mv、rm 底层原理
- 史上最全的LTspice安装教程
- 十、PyQtgraph使用QtDesigner提升3D图形界面
- matlab判断星期几的语句,C语言之根据英文星期首字母来判断星期几
- I.MX6ULL ARM驱动开发---设备树下的platfrom设备驱动