易截截图软件、单文件、免安装、纯绿色、仅160KB

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 条件不符合?

恩,自治事务无法看见其外面父事务新插入的数据。

那请指点一下吧  该怎么做,  不用自治事务也行,


相关问答:

Windows 7 怎样安装Oracle - Oracle / 基础和管理

各位大哥,帮个忙。

下个Oracle for vista 版本的安装试试
10G和11G的 
http://www.oracle.com/technology/software/products/database/index.html 
------------------------------------------- ......

Oracle的blob字段问题 - Oracle / 开发

查了一天的blob,还是没理解到,我想在VC下存取二进制的文件,使用的是oo4o,照着帮助文档上面的写了写入数据库的代码,还是没写对,错误提示是this operation is not permitted on a empty LOB,这是什么意思啊?照 ......

请教Oracle事务隔离级别问题 - Oracle / 非技术区

查看事务隔离级别的命令,
MySQL使用的是select @@tx_isolation;
在Oracle中查看事务隔离级别的命令是哪个?

SQL code:

SELECT /*+ rule */ s.username,decode(l.type,'TM','TABLE LOCK','TX','ROW LOCK', ......

oracle 执行顺序 - Oracle / 基础和管理

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 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号