我试图复制一个Ingres“tbl2”中的更新tbl1命令,这在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,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;
如何定义我的选择,使得Oracle将不满足于我没有唯一性违规?