【请教】这样的应用用触发器来实现好吗?谢谢 触发器是可以做到你这样的,只是实现起来很烦,需用到行级触发器+语句级触发器+包变量或是临时表。只是你的目的是什么,如果A表仅仅是用来做临时表的话,可以用oracle中的临时表, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 因为数据量很大,记录直接写入B表的话,表数据会变的很大,客户端应用连接B表就会变的很慢。to ATsuwu(苏武) :老兄说的没错,我的A表只是临时用一用而已,但oracle的临时表不知道具体怎么用 09:41:28 SQL> create global temporary table tbtemp09:41:46 2 (rid varchar2(20)) on commit delete rows;表已创建。已用时间: 00: 00: 00.7809:42:44 SQL> create or replace trigger trg_tb 09:42:58 2 after insert on tb09:42:59 3 for each row09:42:59 4 begin09:43:00 5 insert into tbtemp values(:new.rowid);09:43:18 6 end trg_tb;09:43:21 7 /触发器已创建已用时间: 00: 00: 00.9409:43:22 SQL> create or replace trigger trg_tb_209:43:56 2 after insert on tb09:44:02 3 begin09:44:04 4 delete from tb where rowid in (select rid from tbtemp);09:45:03 5 end trg_tb_2;09:45:09 6 /触发器已创建已用时间: 00: 00: 00.1609:45:09 SQL> select * from tb;COL1 COL2 COLNEW---------- ------------------------------ --------------------1 aaa aaa2 aaa aaa3 aaa aaa4 bba bba5 bbb bbb6 bbb bbc7 bbb bbd8 bbb ccc9 bbb TEMP10 bbb ddd已选择10行。已用时间: 00: 00: 00.1609:45:15 SQL> insert into tb values('11','c','c');已创建 1 行。已用时间: 00: 00: 00.7809:45:25 SQL> select * from tb;COL1 COL2 COLNEW---------- ------------------------------ --------------------1 aaa aaa2 aaa aaa3 aaa aaa4 bba bba5 bbb bbb6 bbb bbc7 bbb bbd8 bbb ccc9 bbb TEMP10 bbb ddd已选择10行。已用时间: 00: 00: 00.3109:45:29 SQL> commit;提交完成。已用时间: 00: 00: 00.1609:46:12 SQL> 说明刚插入的数据已经被删除。只需要在trg_tb_2中delete语句前加上insert into b select * from a where rowid in(select rid from tbtemp);即可。达到目的。 可以使用替代触发器.create or replace trigger trg_vw_table instead of insert or update or delete on vw_table to bzszp(SongZip) :这样好像不行吧?执行有错误。 to bzszp(SongZip:要不我在QQ请教你吧。这里交流好像不是很方便。我的QQ:8408787 存储过程解决数据拆分并插入表的问题 oracle怎样用to_char()函数来得到“2011-2-22”的字符串呢? 请教:存储过程,是as还是is 如何把数值格式转换为金额式样的字符问题。 如何用Powerdesigner的PDM生成数据库及逆向生成 按照时间排序的问题? oracle9i 中数据库在没有导出的情况下且系统重装后(以前的oracle9i安装目录还在),如何恢复?高分悬赏 问个安装Oracle的问题? oracle中null值占空间吗? 请教一个问题。 查询记录排序的问题 在一个最普通的块里使用序列,出现莫名其妙的错误,请大家帮我看看!谢谢
to ATsuwu(苏武) :老兄说的没错,我的A表只是临时用一用而已,但oracle的临时表不知道具体怎么用
09:41:46 2 (rid varchar2(20)) on commit delete rows;表已创建。已用时间: 00: 00: 00.78
09:42:44 SQL> create or replace trigger trg_tb
09:42:58 2 after insert on tb
09:42:59 3 for each row
09:42:59 4 begin
09:43:00 5 insert into tbtemp values(:new.rowid);
09:43:18 6 end trg_tb;
09:43:21 7 /触发器已创建已用时间: 00: 00: 00.94
09:43:22 SQL> create or replace trigger trg_tb_2
09:43:56 2 after insert on tb
09:44:02 3 begin
09:44:04 4 delete from tb where rowid in (select rid from tbtemp);
09:45:03 5 end trg_tb_2;
09:45:09 6 /触发器已创建已用时间: 00: 00: 00.16
09:45:09 SQL> select * from tb;COL1 COL2 COLNEW
---------- ------------------------------ --------------------
1 aaa aaa
2 aaa aaa
3 aaa aaa
4 bba bba
5 bbb bbb
6 bbb bbc
7 bbb bbd
8 bbb ccc
9 bbb TEMP
10 bbb ddd已选择10行。已用时间: 00: 00: 00.16
09:45:15 SQL> insert into tb values('11','c','c');已创建 1 行。已用时间: 00: 00: 00.78
09:45:25 SQL> select * from tb;COL1 COL2 COLNEW
---------- ------------------------------ --------------------
1 aaa aaa
2 aaa aaa
3 aaa aaa
4 bba bba
5 bbb bbb
6 bbb bbc
7 bbb bbd
8 bbb ccc
9 bbb TEMP
10 bbb ddd已选择10行。已用时间: 00: 00: 00.31
09:45:29 SQL> commit;提交完成。已用时间: 00: 00: 00.16
09:46:12 SQL> 说明刚插入的数据已经被删除。
只需要在trg_tb_2中delete语句前加上
insert into b select * from a where rowid in(select rid from tbtemp);
即可。
达到目的。
create or replace trigger trg_vw_table instead of insert or update or delete on vw_table
执行有错误。
我的QQ:8408787