2016-12-20 8 views
0

Я получаю сообщение об ошибке, которое FROM Keyword не найдено там, где это ожидалось. Пожалуйста, дайте мне знать, что может быть неправильным в приведенном ниже коде. Я пытаюсь выполнить обновление с использованием двух внутренних соединений, а также сделать выбор из другого представления. Пожалуйста, дайте мне знать, как это можно сделать в оракуле.инструкция по обновлению с двумя или более внутренними оракулами соединения и вычисление значений также выбирают из представления

update (Select asset.CRV_AMOUNT as ACRV, 
       cmd.CRV_PERCENT as CRVP, 
       (select CRV$ 
        from recapt.facility_rec_crv_V fac_v 
        where fac_v.fac_code = fac.code 
        AND fac_v.complex_code = fac.complex_code) CRV_TOTAL as CRVT 
      from recapt.asset asset 
       inner join recapt.facility_rec fac 
        on fac.code = asset.fac_rec_code and 
         fac.complex_code = asset.complex_code 
       inner join recapt.cost_model_detail cmd 
        on cmd.cost_model_id = fac.cost_model_id and 
         cmd.mf_division_id = asset.mf_division_id) t 
    SET t.ACRV = ((t.CRVP * t.CRVT)/100); 
+0

Вы скалярный подзапрос с двойным псевдонимом (') CRV_TOTAL as CRVT'). Плюс это не обновляемое представление. –

+0

так что я могу просто использовать CRV_TOTAL? –

+0

Я изменил, что теперь я получаю «не могу изменить столбец, который сопоставляется с таблицей, не содержащей ключей» –

ответ

2

Вы можете попробовать переключиться на инструкцию MERGE - это, вероятно, будет намного проще кодировать и понимать. я не могу проверить это, но что-то в линиях:

merge into recapt.asset asset 
using (select fac.code, 
       fac.complex_code, 
       cmd.mf_division_id, 
       cmd.crv_percent as crvp, 
       (select crv$ 
       from recapt.facility_rec_crv_v fac_v 
       where fac_v.fac_code = fac.code 
        and fac_v.complex_code = fac.complex_code) as crvt 
     from recapt.facility_rec fac 
     inner join recapt.cost_model_detail cmd 
      on cmd.cost_model_id = fac.cost_model_id) t 
    on (asset.fac_rec_code = t.code and 
     asset.complex_code = t.complex_code and 
     asset.mf_division_id = t.mf_division_it) 
    when matched then 
    update set asset.acrv = (t.crvp * t.crvt)/100; 

Если вы предоставите создать таблицу и вставить заявления (с некоторым небольшим количеством тестовых данных) я могу быть в состоянии проверить это, и/или предложить лучшее решение.

+0

это работает фантастический ур бог –

 Смежные вопросы

  • Нет связанных вопросов^_^