Dav*_*wig 0 sql database oracle
我需要能够重复处理XML文件并将大量数据插入Oracle数据库.该过程需要能够创建新记录,或者如果数据已存在则更新现有记录.
我可以想到两种方法来处理将100,000条记录插入/更新到Oracle数据库中.但哪种方法更好?或者还有另一种方式吗?
使用这样的数据是否有"正常"模式?
谢谢!
我不知道''模式是什么,但如果你要生成一个语句,那么也许你可以生成一个select from dual包含XML文件中所有数据的查询联合.然后,您可以将此select包装在MERGE INTO语句中,因此您的SQL看起来像:
MERGE INTO YourTable t
USING (
SELECT 'Val1FromXML' as SomeKey, 'Val2FromXML' as Extrafield, 'Val3FromXML' as OtherField FROM DUAL
UNION ALL
SELECT 'Val1FromRow2' as SomeKey, 'Val2FromXML' as Extrafield, 'Val3FromXML' as OtherField FROM DUAL
...) x ON x.SomeKey = t.SomeKey
WHEN MATCHED THEN
UPDATE SET
t.ExtraField = x.ExtraField,
t.OtherField = x.OtherField
WHEN NOT MATCHED THEN
INSERT (ExtraField, OtherField) VALUES (x.ExtraField, x.OtherField)
Run Code Online (Sandbox Code Playgroud)
这个语句的优点是它只有一个语句,因此它节省了为每一行初始化语句的开销.此外,作为单个语句,它将完全失败或完全成功,否则您将通过事务完成.
这也是一个陷阱.对于这样的导入,您可能希望一次只执行有限数量的行,然后提交.这样你就不会长时间锁定表的大部分内容,并且可以中断导入并稍后继续.但幸运的是MERGE INTO,通过简单地在联合的select-from-dual中放置不超过500行,应该很容易为有限数量的行生成语句.
| 归档时间: |
|
| 查看次数: |
134 次 |
| 最近记录: |