2012-02-07 5 views
0

У меня есть следующее обновление, но я не хочу копировать значения вручную. Я предпочитаю извлекать их с помощью запроса. Должен ли я использовать PL/SQL или есть формулировка SQL?Oracle: обновление с использованием значений из других таблиц

Запрос, который я использую для получения значений, которые я скопировал вручную в обновление, не сохраняет ключ («Концепция таблицы с сохранением таблицы в представлении объединения»).

UPDATE wkf_cronologia 
    SET swkf_stato_workflow_id = 'o3gE1tlSdcDIC6FF', 
     swkf_data_ini = TO_TIMESTAMP ('19-06-2010 18:28:10,556000000','DD-MM-RRRR HH24:MI:SS,FF'), 
     swkf_versione = 0, 
     SPWKF_STATO_PUBBLICO_ID = '*1UNICOO', 
     SPWKF_DATA_INI = TO_TIMESTAMP ('01-01-0001 00:00:00,000000000', 'DD-MM-RRRR HH24:MI:SS,FF'), 
     SPWKF_VERSIONE = 0 
WHERE wkfc_cronologia_id = 'ApAJ0qCudNphjLxj'; 
+0

Вы о том, что 'wkf_cronologia' вид? И что мнение не сохранилось в ключе? Это означает, что Oracle не может определить, какие строки в одной или нескольких базовых таблицах должны обновляться при выпуске инструкции обновления. Можете ли вы сохранить ключ ключа? Можете ли вы обновить базовую таблицу? Можете ли вы создать триггер «INSTEAD OF UPDATE» в представлении, который может определить, какие строки в таблице вы хотите обновить? –

+1

Возможный дубликат [Обновить строки в одной таблице с данными из другой таблицы на основе одного столбца, в каждом из которых равны] (http://stackoverflow.com/questions/7918688/update-rows-in-one-table-with-data -from-another-table-based-on-one-column-in-eac) – Allan

+0

Для пещеры Джастина: Нет, wkf_cronologia - это таблица. Может быть, вы можете лучше понять мой предыдущий пост: http://stackoverflow.com/questions/9164586/oracle-multiple-table-updates-ora-01779-cannot-modify-a-column-which-maps-t/9166046# 9166046I – Revious

ответ

1

Вы можете использовать подзапрос:

UPDATE wkf_cronologia 
    SET (swkf_stato_workflow_id, 
     swkf_data_ini, 
     swkf_versione, 
     SPWKF_STATO_PUBBLICO_ID, 
     SPWKF_DATA_INI, 
     SPWKF_VERSIONE) = (select a,b,0,c,d,e 
          from another_table 
          where something=wkf_cronologia.swkf_stato_workflow_id) 
WHERE swkf_versione is null; 
Смежные вопросы