2012-02-07 95 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'觸發器,它可以找出你想要更新的表中哪些行? – 2012-02-07 12:28:01

+1

[更新一個表中的行與來自另一個表的數據基於每一列中的一列相等](http://stackoverflow.com/questions/7918688/update-rows-in-one-table-with-data -from-another-table-based-on-one-column-in-eac) – Allan 2012-02-07 13:58:51

+0

對於賈斯汀洞穴:不,wkf_cronologia是一張桌子。也許你可以bettere閱讀我以前的帖子:http://stackoverflow.com/questions/9164586/oracle-multiple-table-updates-ora-01779-cannot-modify-a-column-which-maps-t/9166046# 9166046I – Revious 2012-02-07 20:27:54

回答

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; 
相關問題