是否有可能仅在数据被真正改变的情况下使用"更新后"触发器.我知道"新旧".但是在使用它们时我只能比较列.例如"NEW.count <> OLD.count".
但我想要的是:如果"NEW <> OLD"则运行触发器
一个例子:
create table foo (a INT, b INT);
create table bar (a INT, b INT);
INSERT INTO foo VALUES(1,1);
INSERT INTO foo VALUES(2,2);
INSERT INTO foo VALUES(3,3);
CREATE TRIGGER ins_sum
AFTER UPDATE ON foo
FOR EACH ROW
INSERT INTO bar VALUES(NEW.a, NEW.b);
UPDATE foo SET b = 3 WHERE a=3;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1 Changed: 0 Warnings: 0
select * from bar;
+------+------+
| a | b | …Run Code Online (Sandbox Code Playgroud) 抱歉,这是一个不起眼的标题.我会随着时间进行编辑.
我有一张桌子RateTable:
| Code | Date | Rate |
B001 2009-01-01 1.05
B001 2009-01-02 1.05
B001 2009-01-03 1.05
B001 2009-01-04 1.05
B001 2009-01-05 1.06
B001 2009-01-06 1.06
B001 2009-01-07 1.06
B001 2009-01-08 1.07
Run Code Online (Sandbox Code Playgroud)
每天都有一个条目,但费率很少变化.我是否可以编写一个只返回发生速率变化的行的SQL查询?我正在使用SQLServer
我希望能够看到更改特定列的时间。澄清一下,我不想看到更改行的时间。 我能够使用ROWDEPENDENCIES并通过时间戳触发。使用ROWDEPENDICIES,我可以看到整个行的最后修改时间,但是我特别想了解特定列的更改时间。
为了澄清,我想要下表:
id Name Name_modified_on Salary Salary_modified_on
1 Johnson 11.03.16 10:54:27 5000 11.03.16 10:51:27
Run Code Online (Sandbox Code Playgroud)
我怎么做?谢谢。PS:我正在运行Oracle 11g。