1

我需要对 Oracle 10g 数据库中的表(约 30,000 条记录)进行大规模更新。挑战在于没有可以选择目标行的“where”子句。但是,每个目标行都可以通过复合键来标识。这里的问题是复合键列表来自外部源(不在数据库中)。

目前,我有一个 Java 程序,它遍历复合键列表并吐出一个 PL/SQL 过程,该过程本质上只是一堆重复的update语句,类似于以下内容:

update table1 t set myfield='Updated' where t.comp_key1='12345' and t.comp_key2='98765';

有没有更好的方法来做到这一点,或者考虑到我们只处理约 3 万条记录,这是否“足够好”?

4

2 回答 2

3

可能已经足够好了,但是如果键的外部源是文件,请创建一个指向该文件的外部表,将文件中的数据公开为关系表,然后您可以在合并(更新)语句中执行此操作.

于 2013-04-18T18:19:58.547 回答
2

够好了。

使用主键进行 30,000 次更新,即使它们都是硬解析的,通常也只需要几秒钟。正如@Ed Gibbs 建议的那样,您可能可以通过组合更新来加快速度。但到目前为止,这看起来是一个非常快速的过程,不值得优化。将所有这些都放在一个 PL/SQL 过程中是一个明智之举,并且节省了 99% 的时间,而这对于真正天真的、逐行从客户端的解决方案来说是必要的。

于 2013-04-18T18:50:50.677 回答