ORA-30926: unable to get a stable set of rows in the source tables(无法在源表中获得一组稳定的行)
Oracle含义
在 MERGE(或可更新连接)语句中,源端为同一目标行产生了多个匹配行。Oracle 无法决定用哪个源值更新,因此停止了操作。
原因
MERGE ... USING 的源中包含 ON 条件的重复匹配;源查询在目标键上不唯一;多个源行映射到同一目标行。
解决方法
使源查询在目标键上唯一。查找重复匹配:SELECT key_col, COUNT(*) FROM (source_query) GROUP BY key_col HAVING COUNT(*) > 1; 用 DISTINCT 或聚合/分析函数(ROW_NUMBER)对源去重,然后重新运行 MERGE。确保 ON 条件具有足够的选择性。
同一数据库的其他条目
- ORA-04068existing state of packages has been discarded(已丢弃程序包的当前状态)
- ORA-01427single-row subquery returns more than one row(单行子查询返回多个行)
- ORA-12899value too large for column(列的值太大)
- ORA-08103object no longer exists(对象不再存在)
- ORA-01843not a valid month(无效的月份)
- ORA-14400inserted partition key does not map to any partition(插入的分区关键字未映射到任何分区)
- ORA-01536space quota exceeded for tablespace(超出表空间的空间限额)