1

我该如何解决这个错误:

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 
4

2 回答 2

3

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

在这里,当且仅当 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 中从来都不是真的。

于 2013-09-12T09:01:43.847 回答
2

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

于 2013-09-12T09:47:11.223 回答