2014-02-20 7 views
0

Предположим, у меня есть следующие таблицыOracle Update Где Target Повторяющиеся

Целевая таблица

sales 
    ID  ItemNum  DiscAmt OrigAmt 
    1  123   20.00  NULL 
    2  456   30.00  NULL 
    3  123   20.00  NULL 

Источник Таблица

prices 
    ItemNum  OrigAmt 
    123   25.00 
    456   35.00 

Я пытался обновить OrigAmt в целевой таблице, используя OrigAmt в таблице источников, используя

UPDATE 
    ( SELECT s.OrigAmt dests 
      ,p.OrigAmt srcs    
     FROM  sales s 
     LEFT JOIN prices p 
     ON  s.ItemNum = p.ItemNum 
    ) amnts 
    SET amnts.dests = amnts.srcs 
    ; 

, но я получаю: ORA-01779: не могу изменить столбец, который сопоставляется с таблицей с сохранением не ключа Я также попытался использовать слияние, но я получаю: ORA-30926: не удается получить стабильный набор строк в исходных таблицах

+0

ли Ваша исходная таблица уникального на 'ItemNum'? – Ben

+0

Да, это уникально, извините, что пропустил это – waine

ответ

0

Вы не можете ОБНОВЛЯТЬ результат произвольного SELECT.

Одно заявление, предполагая, что ItemNum является первичным ключом для цен:

UPDATE sales WHERE (SELECT count(price.ItemNum) FROM price 
    WHERE price.ItemNum = sales.ItemNum) > 0 
SET OrigAmt = 
    (SELECT MAX(OrigAmt) FROM price 
    WHERE price.ItemNum = sales.ItemNum) 

Вы могли бы сойти с рук, опуская где и/или MAX.

менее запутанные: петля курсор над

SELECT ItemNum, OrigAmt FROM price 

выполняет ряд обновлений для каждого ItemNum от цен таблицы:

UPDATE sales SET OrigAmt=? WHERE ItemNum=? 
Смежные вопросы