Как с UPDATE обновить колонку из JOIN двух таблиц (ошибка: ORA-00971)?

Делаю UPDATE:

UPDATE Table1 T
JOIN Table2 A 
ON T.Account = A.Account AND T.Code_Currency = A.CODE_CURRENCY
SET A.BALANCE1 = 45010
WHERE T.PRODUCTID = 25; 

Но выдает такую ошибку:

ORA-00971: missing SET Keyword

Почему, как можно исправить?


Ответы (1 шт):

Автор решения: 0xdb

Если действительно нужно соединение таблиц в UPDATE, то можно с представлением:

create table t1 (account, productid, code_currency, 
    constraint uqt1 unique (account, code_currency)
    ) as select 2, 25, 1 from dual
/
create table t2 (account, code_currency, balance1) as
    select 2, 1, 0 from dual
/

update (
    select t.productid, a.balance1  
    from t1 t
    join t2 a on a.account=t.account and a.code_currency=t.code_currency)
set balance1 = 45010
where productid = 25
/ 

1 row updated.

В зависимости от ограничений, определённых на таблицах, возможно будет получена ошибка:

ORA-01779: cannot modify a column which maps to a non key-preserved table

Прична этой ошибки уже не раз обсуждалась, например, в темах раз и два.

Без соединение таблиц и независимо от ограничений, так будет работать:

alter table t1 drop constraint uqt1
/
update t2 a
set balance1 = 45010
where exists (
    select 1 from t1 t
    where productid = 25
    and a.account=t.account and a.code_currency=t.code_currency)
/ 

1 row updated.
→ Ссылка