你的目的最终是对A和B中id相同,且pay=n的记录插入要B表中
create table B2 as select id from B;
truncate table B;
insert into B(id,name,area) (select A.id,A.name,A.area from A,B2 where B2.id= A.id
and a.pay = n)
create table B2 as select id from B;
truncate table B;
insert into B(id,name,area) (select A.id,A.name,A.area from A,B2 where B2.id= A.id
and a.pay = n)
解决方案 »
- 通过DBMS_METADATA.GET_DDL函数生成语句出错
- 行锁的表示
- oracle 视图传参 实现in查询
- 编译一过程时,出现PLS-00103错误,怎么解决?
- ORALCE还原部分用户下的数据(系统崩溃后)
- "急!急!急!在线等待"[80分]求oracle 8i 客户端的安装程序
- 关于Oracle客户端 远程连接数据库的问题
- 紧急求救:服务器突然崩溃,系统重装后我只能把*.ora文件拷出来,请问如何把*.ora文件中的数据倒入oracle中?
- 倾囊献出!!!!!!!!!!!!高手帮忙
- 回滚段的问题
- 如何在oracle中建视图?帮忙看看这个语句对吗?
- 请介绍下好的ORACLE的学习资料和网站 高分相送,谢谢
不过
表A有上百万的数据每天要把符合一定条件的记录的一些字段值存入表B,
如果每天都truncate,会不会不太好啊,有碎片多?
还有,种种原因不需要用触发器
能不能有其他的方法呢?
USING ( select * from A where A.pay = 'n' ) as Temp
ON ( B.ID = Temp.ID )WHEN MATCHED THEN
UPDATE B SET
B.name = Temp.name,
B.area = Temp.areaWHEN NOT MATCHED THEN
INSERT INTO B ( id, name, area )
VALUES ( Temp.id, Temp.name, Temp.area );
而且,无法rollback
“truncate B会带来问题的,因为B当中可能有与A中根本不匹配的ID存在,truncate之后会造成数据丢失
而且,无法rollback”
可能我没表述清楚
B中如果有与A中不匹配的ID存在,则应该在B中删除此ID。
truncate无法rollback
不过如果用delete 是不是太慢了呢?
一条记录都没有,还怎么知道--“如果B中有记录的id和要插入的数据id相同,则判断name、area是否一致”你应该先把不同的纪录都删了,然后update所有id相同的纪录,使name、area一致1.delete from B where B.id not in (select A.id from A where A.pay = n)2.insert into B(id,name,area) (select A.id,A.name,A.area from A where A.id in ( select B2.id from B B2 ) and A.pay = n)
B.name = (select A.name from A where A.id = B.id and A.pay = n),
B.area = (select A.area from A where A.id = B.id and A.pay = n)
truncate 表B
insert into 表B
select distinct id,name,area from 表A
where pay=n我想你要实现的就是上面的操作吧!