【问题标题】:Oracle merge into statements not working properlyOracle 合并到无法正常工作的语句中
【发布时间】:2018-12-06 21:30:59
【问题描述】:

我在 oracle 中运行以下两个合并到查询,第一个正在运行,但第二个合并到语句未运行。它返回以下响应: ORA-30926:unable to get a stable set of rows in the source tables。

这两个查询都使用相同的表并且非常相似。它们之间的唯一区别是第二个合并查询使用三个“ON”条件,而第一个只使用两个“ON”条件。

我需要找到一种解决方法,以便实现我对第二个查询的意图。请帮忙。

查询 1)

MERGE INTO loc_final_2_exp t USING (        
    SELECT DISTINCT upper(trim(city)) as city, 
                    upper(trim(state)) as state, 
                    upper(trim(county)) as county  
    FROM audtr_rgn_assgnmnts) a     
    ON (upper(trim(t.city)) = a.city AND 
        upper(trim(t.state)) = a.state)
WHEN MATCHED THEN UPDATE SET t.county = a.county;

查询2)

MERGE INTO loc_final_2_exp t USING (     
    SELECT DISTINCT  upper(trim(city)) as city, 
                     upper(trim(state)) as state, 
                     upper(trim(county)) as county, 
                     upper(trim(auditor)) as auditor
    FROM audtr_rgn_assgnmnts) a   
    ON (upper(trim(t.county))=a.county and 
        upper(trim(t.city)) = a.city and 
        upper(trim(t.state)) = a.state)
WHEN MATCHED THEN UPDATE SET t.loc_status = a.auditor;

【问题讨论】:

  • 请参考此链接,因为您的内部查询可能会重复...stackoverflow.com/questions/33627802/…
  • 显然AUDTR_RGN_ASSGNMNTS 表中至少有一个(市、州、县)组合存在不止一行,AUDITOR 的值不同。在这种情况下,应该使用哪个AUDITOR 值进行更新?要么数据有错误,AUDITOR 应该完全由(市、州、县)确定(在这种情况下,您必须先修复数据 - 找到错误并纠正它们) , 否则问题本身没有意义,不管任何代码(甚至,不管一般的计算机和数据库)。

标签: oracle merge


【解决方案1】:

您为您的案例提供的信息不足,即您没有解释什么是您的数据库结构,重点是这两个表中的主键和唯一键/约束是什么。您还没有显示示例数据。

如文档所述,“ORA-30926:unable to get a stable set of rows...”错误意味着,您的合并语句匹配条件导致合并源的多行匹配至少一行目标表。

不,这不仅仅是两个语句之间不同的条件列表。第二个子查询还返回了一组不同的列,其中 - 使用 DISTINCT - 会建议,对于 citystatecountryaudtr_rgn_assgnmnts 表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 2015-01-01
    • 2019-05-15
    • 2015-09-27
    • 2016-04-14
    相关资源
    最近更新 更多