我们设定了将项目从 MySQL 迁移到 Oracle 的任务。对 Orakl 不熟悉,我正在学习。
通过以下方式处理重复输入错误是一种好习惯:
EXCEPTION WHEN DUP_VAL_ON_INDEX
或者使用它会更好MERGE
吗?
我们设定了将项目从 MySQL 迁移到 Oracle 的任务。对 Orakl 不熟悉,我正在学习。
通过以下方式处理重复输入错误是一种好习惯:
EXCEPTION WHEN DUP_VAL_ON_INDEX
或者使用它会更好MERGE
吗?
提前分析数据并据此做出决策是一种很好的做法。
比较可能的解决方案
EXCEPTION WHEN DUP_VAL_ON_INDEX
使用in或 trigger捕获异常FOR ... LOOP
显然不是比在插入之前显式检查重复数据更好的选择。因此,我不再考虑它。假设已经有 50 万行,一个数据源有 100 万行,其中一半是新记录。应该注意的是,改变这个比率会显着影响结果。还从@volkovirus 获取了替代答案以进行比较。
运行时间比较:
结果:
结论:
那么检查
#1 not exists
就足够了那么肯定
#2 MERGE
那么这
#3 log errors
将是一个合适的解决方案这一切都取决于你最终想要什么。
MERGE
在您的情况下,可以更新匹配字段上的记录。您也可以不生成
еxception
,而是将日志表中出现插入错误的所有行都丢弃,稍后您将对其进行分析并做出决定:为表创建一个错误日志表:
接下来,我们插入自身
table1
:您可以保留插入内容并添加IGNORE_ROW_ON_DUPKEY_INDEX提示。
文档指出,此提示是一般规则的例外,以避免在生产环境中使用提示: