Estoy tratando de replicar un comando Ingres "update tbl1 from tbl2", que no existe exactamente en Oracle.Oracle - unión de actualización - tabla sin clave conservada
Entonces uso el comando "update (select tbl1 join tbl2 ...)". Ambas tablas tienen claves principales definidas e I pensó que mi unión identificaba filas de forma única, pero sigo obteniendo "ORA-01779: no se puede modificar una columna que se asigna a una tabla no conservada por clave".
Aquí quedan en el anonimato adecuadamente definiciones de tabla y la actualización estoy tratando de ejecutar:
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;
¿Cómo puedo definir mi selecto de tal manera que Oracle va a estar satisfecho de que no tengo violaciónes singularidad?
Esto parece resolver el problema, y gracias por la explicación. Que tiene sentido. –