我试图复制 Ingres 的 "update tbl1 from tbl2" 命令,但是 Oracle 中并不存在这个命令。
所以我使用了 "update (select tbl1 join tbl2...)" 命令。两个表都定义了主键,而且我认为我的连接已经唯一地标识了行,但是我仍然得到了 "ORA-01779:无法修改映射到非保留键表的列" 错误。
以下是经过适当匿名化的表定义和我要执行的更新:
CREATE TABLE tbl1
(
ID decimal(11) NOT NULL,
A varchar2(3) NOT NULL,
B float(7),
CONSTRAINT tbl1_pk PRIMARY KEY (ID,A)
)
;
CREATE TABLE tbl2
(
ID decimal(11) NOT NULL,
A varchar2(3) NOT NULL,
B float(15),
C float(15),
D char(1) NOT NULL,
CONSTRAINT tbl2_PK PRIMARY KEY (ID,A,D)
)
;
UPDATE
(select tbl1.b, tbl2.c
from tbl1 inner join tbl2
on tbl1.id=tbl2.id
and tbl1.a=tbl2.a
and tbl1.b=tbl2.b
and tbl1.a='foo'
and tbl2.D='a')
set b=c;
我该如何定义我的select语句,使得Oracle能够确认我没有唯一性违规?