【问题标题】:ORA-017779 : cannot modify a column which maps to non key-preserved tableORA-017779: 无法修改映射到非键保留表的列
【发布时间】:2013-09-12 08:27:44
【问题描述】:

我该如何解决这个错误:

ORA-017779:无法修改映射到非键保留表的列。

我的代码:

UPDATE   (SELECT SOBS034.T1 as OLD, SOBS063.T1 as NEW
          FROM SOBS034 
          INNER JOIN SOBS063  ON SOBS034.ID = SOBS063.ID
          where  SOBS034.ID='111000' AND SOBS063.T2='' ) t
SET t.OLD =t.NEW 

【问题讨论】:

    标签: oracle oracle9i


    【解决方案1】:

    要更新JOIN,Oracle 需要绝对确保对于您尝试更新的表的每一行,连接表最多一行。 p>

    在这里,您将能够更新连接当且仅当 SOBS063.ID 是唯一的(由唯一约束/pk 明确声明)。

    如果SOBS063.ID 在您的连接条件下对于此记录是唯一的,但未声明为这样,您将无法使用此方法。但是,您可以将此 DML 转换为等效的 MERGE,如下所示:

    MERGE INTO SOBS034 a
    USING SOBS063 b
    ON (a.id = b.id AND a.ID='111000' AND b.T2 IS NULL)
    WHEN MATCHED THEN UPDATE SET a.t1 = b.t1;
    

    顺便说一句,SOBS063.T2='' 现在在 Oracle 中永远不会成立。

    【讨论】:

    • 感谢您的回复。但是,我再次收到此错误。 “ORA-00905 缺失错误”。
    • 你没有提供:CREATE TABLE 语句,INSERT 语句,所以我帮不了你
    【解决方案2】:

    尝试在 SOBS034 (ID) 和 SOBS063 (ID) 上创建唯一索引。

    【讨论】:

      猜你喜欢
      • 2013-06-10
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多