我有一个合并查询,对一些记录(<500)都可以正常工作
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)会发生此问题
错误:合并声明ORA-30926:无法在源中获得稳定的行集
我希望将merge语句分块执行(一次说1000),以便可以识别出数据的确切问题。
答案 0 :(得分:0)
ORA-30926:无法在源中获得稳定的行集
此错误表示数据库无法将tableA
中的一条记录与tableB
中的一条记录进行匹配。这使得MERGE结果不可预测,Oracle也不喜欢不可预测的结果。
UNIQUEID字段是TableB中的主键,因此没有重复的可能性
因此,您需要在tableA
中查找重复的事件。这是一种实现方法:
select a.uniqueid
, count(*)
from tablea a
group by a.uniqueid having count(*) > 1
出于性能原因,或者您可能想加入tableB
来验证tableb.uniqueid
实际上与您认为的一样独特:
select a.uniqueid
, count(*)
from tablea a
join tableb b on b.uniqueid = a.uniqueid
group by a.uniqueid having count(*) > 1