oracle中如何实现获取上次的更新时间?

happy_bychance 2008-10-29 10:09:37
新建了一张表table1,有个存储过程proc1每天都将table1写入到另一张表table2中,原来都是全量写,随着表中数据增多速度变得很慢,我现在希望能做到增量写,table1中有个字段xgsj(修改时间),table1是如果有新数据就在xgsj上写入新添加时的时间,如果是有修改则修改xgsj为修改的时间,现在问题是在存储过程中不知如何获得上次该存储过程执行时xgsj上的最新时间,请大家帮忙,谢谢!~
...全文
299 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zymhdboy 2008-10-30
  • 打赏
  • 举报
回复
建议建一个含时间字段的日志表,每次执行完你的存储过程后把时间写进日志表中,这样在下次执行时就知道上次存储过程执行的时间
happy_bychance 2008-10-29
  • 打赏
  • 举报
回复
请大家帮帮忙啊,谢谢了~~~~
happy_bychance 2008-10-29
  • 打赏
  • 举报
回复
table1的表结构不可以更改的了,你说的办法挺好的,但是现在不能用。。。
除了触发器,直接在存储过程可以实现么???

[Quote=引用 5 楼 zymhdboy 的回复:]
触发器好,如果不稳定可以将失败的数据写日志
不想用触发器的话,建议table1设个标志字段,新增数据时缺省为I,修改数据时设为U,传送到table2后改成0,这样每次需要传送的数据就是标志为I的直接插入,标志为U的可以先删除table2的数据再插入
[/Quote]
zymhdboy 2008-10-29
  • 打赏
  • 举报
回复
触发器好,如果不稳定可以将失败的数据写日志
不想用触发器的话,建议table1设个标志字段,新增数据时缺省为I,修改数据时设为U,传送到table2后改成0,这样每次需要传送的数据就是标志为I的直接插入,标志为U的可以先删除table2的数据再插入
happy_bychance 2008-10-29
  • 打赏
  • 举报
回复
不同服务器之间触发担心不稳定

[Quote=引用 2 楼 hongqi162 的回复:]
你弄个触发器实时的更新到table2不可以么?
[/Quote]
happy_bychance 2008-10-29
  • 打赏
  • 举报
回复
因为是要远程更新,table1和table2不是同一台服务器上的表,远程的触发器担心稳定性不够

[Quote=引用 1 楼 linzhangs 的回复:]
写触发器。
before insert or update of xgsj on table1
if updating
。。。
if inserting
。。。
[/Quote]
hongqi162 2008-10-29
  • 打赏
  • 举报
回复
你弄个触发器实时的更新到table2不可以么?
范佩西_11 2008-10-29
  • 打赏
  • 举报
回复
写触发器。
before insert or update of xgsj on table1
if updating
。。。
if inserting
。。。
codearts 2008-10-29
  • 打赏
  • 举报
回复
你这个功能自已来实现的法,我想是挺麻烦的(真正把所有的问题都考虑的话)

其实用materialize view + dblink就好了,最为简单。你设置一个job,每天晚上刷新这个materialize view(物化视图)即可
伯诚 2008-10-29
  • 打赏
  • 举报
回复
楼主可以这样做
1.“table1是如果有新数据就在xgsj上写入新添加时的时间”
解决方法:
alter table table1
alter column xgsj set default sysdate;

2."如果是有修改则修改xgsj为修改的时间"
解决方法:
create or replace trigger tig_table1
before update on table1
for each row
declare
-- local variables here
begin
:new.xgsj:=SYSDATE;
end tig_table1;

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧