社区
基础和管理
帖子详情
行级触发器中,如何获得被更新的字段名称?
musicboy1999
2003-03-11 04:48:52
行级触发器中,我想获得被更新的字段名称,是否只能一个个字段的比较?用
:NEW.fieldValue和:OLD.fieldValue来比较吗?有没有更快的方法??
...全文
88
7
打赏
收藏
行级触发器中,如何获得被更新的字段名称?
行级触发器中,我想获得被更新的字段名称,是否只能一个个字段的比较?用 :NEW.fieldValue和:OLD.fieldValue来比较吗?有没有更快的方法??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
beckhambobo
2003-03-11
打赏
举报
回复
只能这样。
hanps
2003-03-11
打赏
举报
回复
好象只能通过:new 和:old 比较
Lastdrop
2003-03-11
打赏
举报
回复
"把每一字段更新的新值记录下来",那么说你保留了上次的新值或者说旧值了?那你是不是可以在插入监控语句的时候加上where 监控表.fieldvalue<>:new.fieldvalue的条件,这样若未更新,就不会多插入一条记录.
musicboy1999
2003-03-11
打赏
举报
回复
对于update好像只能一个个字段的去比较了?没有一下子定位的办法....?
beckhambobo
2003-03-11
打赏
举报
回复
首先insert触发器没有:old,所返的值是空
其次delete触发器没有:new,所返回的是null
那只能在update触发器作比较
create trigger name_tri
before update on table_name
for each row
begin
if :NEW.fieldValue 与:OLD.fieldValue作比较
....
musicboy1999
2003-03-11
打赏
举报
回复
呵呵,我说详细点,我的行级触发器就是想监控该表的记录是否被insert,update,delete 并且把每一字段更新的新值记录下来,我如何知道那个字段发生更新,哪些没有更新?是否只能一个个字段用:NEW.fieldValue和:OLD.fieldValue来比较?有没有更快的方法??
beckhambobo
2003-03-11
打赏
举报
回复
搞不懂所表达意图.
Oracle
触发器
修改自身表
1、
行级
触发器
不支持 update 、select 、delete 对自身表的操作。 2、表级
触发器
不支持 :new 和 :old对象 所以想要
触发器
对自身表数据做修该,则用
行级
触发器
得到 :new 和 :old对象
中
的相关数据,然后将这样的数据保存到 package
中
,然后在语句级触发期
中
调用 package包
中
保存的数据,进行
更新
操作
实验六-
触发器
实验报告.doc
实验五
触发器
实验报告 [实验目的] 1. 理解Oracle
触发器
的种类和用途 2. 掌握
行级
触发器
的编写 [预备知识] 1. PL/SQL程序设计 [实验原理] 1. 建立
触发器
CREATE [OR REPLACE] TRIGGER <
触发器
名> BEFORE"AFTER INSERT"DELETE"UPDATE OF <列名> ON <表名> [FOR EACH ROW] WHEN (<条件>)
ON 子句
中
的
名称
识别与数据库
触发器
关联的数据库表
触发器
事件指定了影响表的 SQL DML 语句 ( INSERT、 DELETE 或 UPDATE) AFTER 指定了
触发器
在处理完成后触发 BEFORE 指定了
触发器
在处理完成前触发 默认情况下,
触发器
每个表触发一次 FOR EACH ROW 选项指定
触发器
每行触发一次(即
触发器
为
行级
触发器
) 要使
触发器
触发,WHEN 子句
中
布尔型表达式的值必须判定为 TRUE 可以将 REPLACE 添加到 CREATE 语句以自动删除和重建
触发器
2.
行级
触发器
中
引用表数据 在
行级
触发器
中
,使用伪记录来表示旧数据:old和新数据:new 引用示例::new.customer_name, :old.customer_name 3.
行级
触发器
中
的谓词 在一个多条件触发的
触发器
中
,使用谓词可以区分当前触发的操作的类型:inserting, updating,deleting。 示例: IF Inserting THEN 语句 ; END IF; IF Updating THEN 语句 ; END IF; IF Deleting THEN 语句 ; END IF; 4.
触发器
的限制 SELECT 语句必须是 SELECT INTO 语句或内部游标声明。
行级
触发器
不可以对触发表进行查询,包括其调用的子过程
中
。 不允许 DDL 声明和事务控制语句 。 如果由
触发器
调用存储子过程,则存储子程序不能包括事务控制语句 。 :old 和 :new 值的类型不能是 LONG 和 LONG RAW。 [实验内容] 1. 给Customer表增加一列Savings,类型为int,来存放每个顾客的存款总额。 ALTER TABLE customer ADD (saving varchar2(30)); select * from customer; 2.
更新
Customer表,使得Savings
字段
的值正确。 3. 在Account表上增加一个
行级
触发器
,当对account的balance进行update和insert一个 记录时同步修改Customer的Savings
字段
,保证数据的一致性。 4. 对account进行update操作,记录account表和customer表的变化。 5. 去掉顾客- 存款账号表
中
引用account表的外键约束(如果不去掉,后面的操作无法实现。当然最 佳的方法是修改其外键约束的
更新
策略,但考虑到复杂性,这里使用不标准的做法, 但建议大家实际运用
中
不要这么做)。在顾客- 存款账号表插入一条记录,表明顾客开设了一个新的账户。 6. 将一条刚才新开账户号的存款记录插入账号表,记录account表和customer表的变化。 [实验总结] 1. 实验
中
遇到的问题和解决的方法。 ----------------------- "触发事件 ":old ":new " "Insert "无定义,所有
字段
都是N"该语句完成后插入的值 " " "ULL " " "Update "
更新
前该行的旧值 "
更新
后该行的值 " "Delete "删除前该行的值 "无定义,所有
字段
都是N" " " "ULL "
oracle
触发器
详解
oracle
触发器
详解,对初步学习数据库的人有很大的帮助
oracle练习题关于
触发器
的作业
一点关于oracle的练习题!较难~慢慢看吧!~受打击了别管我啊!!!!
数据库
触发器
学习资料
对象 学习数据库
触发器
的朋友或许有帮助
基础和管理
17,378
社区成员
95,113
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章