【发布时间】:2019-05-07 04:36:20
【问题描述】:
我有一个合并查询,它适用于少数记录 (
Merge into TableA A using TableB B on (UNIQUEID = UNIQUEID)
when matched
then update
set
A.id = B.id,
when not matched
then insert (
A.id
)
values(
B.id
)
大型数据集(> 7000)会出现此问题
错误:MERGE STATEMENT ORA-30926:无法在源中获得一组稳定的行
我希望以块的形式执行合并语句(比如一次 1000 条),以便确定数据的确切问题。
【问题讨论】:
-
@a_horse_with_no_name 我知道这是一个数据问题,这就是我想分块执行它的原因。每次发生数据问题时手动输入约 1 万条记录是不切实际的
-
你想达到什么目的?您想在异常发生之前处理尽可能多的记录吗?在这种情况下,我建议使用带有 LIMIT 的 BULK COLLECT 来获取您想要处理的所有 ID,然后再获取 FOR ALL。另一个解决方案是DML Error Logging
-
“我希望以块的形式执行合并语句(例如一次 1000 条),以便可以识别数据的确切问题。” - 不一定是这样您识别数据问题。基本上你需要找到重复的记录,因为一张表中的
UNIQUEID不是另一张表中的UNIQUE。使用this 之类的查询来识别哪些记录是重复的,并在继续之前决定必须对它们做什么。然后,您可以相应地更改您的MERGE查询。 -
我已经试过了,@KaushikNayak UNIQUEID 字段是 TableB 中的主键,所以在 TableA 中插入数据时不可能出现重复,因为错误发生在执行的中途,错误的记录没有被插入,因此我无法识别它
-
向我们展示您尝试识别重复项的确切查询,您应该基本上检查
TableA中的重复项,匹配TableB中的唯一 ID。
标签: sql database oracle jdbc merge