ORACLE 触发器如何update最新insert的数据
触发器如下:
CREATE or replace TRIGGER TEST_DB.add8hour after
INSERT ON TEST_DB.REPOSITORY for each row
declare PRAGMA AUTONOMOUS_TRANSACTION;
begin
update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE :new.RP_ID=(select max(:new.RP_ID) from TEST_DB.REPOSITORY);
commit;
end;
目的是update最新insert的数据, 该数据的特征是拥有 RP_ID 的最大值, 但结果是 触发器只能update它的上一条记录,而不是本次的, 该怎么做?
update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE :new.RP_ID=(select max(RP_ID) from TEST_DB.REPOSITORY);
试试?
很怪 如果 select max(RP_ID) 那样改的话连上一条也不更新了
新插入的记录,RP_ID是不是最大的?
该记录刚刚插入,after触发器即更新它?
update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE RP_ID=:new.RP_ID;
新插入的记录,RP_ID是不是最大的? ——是的
该记录刚刚插入,after触发器即更新它? —— 是这个目的
update TEST_DB.REPOSITORY set RP_MODIFIED_TIME=:NEW.RP_MODIFIED_TIME+1/3 WHERE RP_ID=:new.RP_ID;
这样也是一条也不更新, 会不会是在 new 的所取到值上有什么说法, where 条件不符合?
恩,自治事务无法看见其外面父事务新插入的数据。
那请指点一下吧 该怎么做, 不用自治事务也行,
相关问答:
各位大哥,帮个忙。
下个Oracle for vista 版本的安装试试
10G和11G的
http://www.oracle.com/technology/software/products/database/index.html
------------------------------------------- ......
查了一天的blob,还是没理解到,我想在VC下存取二进制的文件,使用的是oo4o,照着帮助文档上面的写了写入数据库的代码,还是没写对,错误提示是this operation is not permitted on a empty LOB,这是什么意思啊?照 ......
查看事务隔离级别的命令,
MySQL使用的是select @@tx_isolation;
在Oracle中查看事务隔离级别的命令是哪个?
SQL code:
SELECT /*+ rule */ s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK', ......
SQL code:
declare
v_deptno number(2);
v_dname varchar2(14);
begin
dbms_output.put_line('请输入部门号和部门名:');
v_deptno:=&deptno;
v_dname:='&dname';
insert into dept01(deptno,dnam ......