需求:文件批量导入,若有主键重复的原始记录则删除,重新导入。
做法:
1.读取文件的一条记录后,先select库中是否有,有就delete,然后insert;效率太低,文件数据大。
2.直接insert,报主键重复才delete,然后再insert;请问这么做有什么问题?
还有最恰当的优化是什么样的?
做法:
1.读取文件的一条记录后,先select库中是否有,有就delete,然后insert;效率太低,文件数据大。
2.直接insert,报主键重复才delete,然后再insert;请问这么做有什么问题?
还有最恰当的优化是什么样的?
解决方案 »
- Oracle 如何设置不区分大小写查询(索引,全表扫描)?
- 关于FORALL 批量提交问题
- oracle9i中的oem如何把另一台oracle服务器作为节点增加进去?
- proc编译正常,执行Illegal instruction(coredump)
- 求救!如何oracle数据中的>替换成>?
- 在 pl sql 里错删除了table表,请问怎么能恢复?急,在线等带
- (oracle)tnsping本地建立的net名,为什么在aix unix下不通,而在windows下却能通??
- 关于现在大型网络数据库的一个调查?100分来着皆有
- 问个日期转换的问题:我a表rq字段内容(DATE型)格式为:29-1月 -05,b表rq字段内容(DATE型)格式为:01/23/2005 00:00:00,我现在要比较日期
- 高分求救oracle在Linux 或者unix下能正确显示中文的 表名和 字段名吗
- 求教3500W条数据的insert效率问题
- 两张表数据一样 一张表增加数据 怎么样让另一张表也增加
从文件导入这样的操作,你要先把文件中的所有记录先导入到一张临时表。导用完成后,用数据库的统一去合并,最后清空临时表;合并时使用 merge 语句,楼主先百度一下,有问题再来追问;
when matched then update set ...
when not matched then insert value()
DECLARE
CURSOR csr_data IS
SELECT *
FROM A;
BEGIN
FOR a IN csr_data
LOOP
UPDATE B b
SET
b.列名= a.列名 //这里是需要更新的字段
WHERE
b.列名=a.列名 //判断条件
;
END LOOP;
END;
2, 楼主实际要做的操作是UPDATE,所以merge最合适