2016-02-16 18 views
1

是否可以更新不同表中的Update語句中的2列? - 究其原因,「腳本」。在更新語句中運行2個SET Oracle

其中,「腳本」將是「標誌」,所以該公式不會再對相同的記錄,如果該字段被填充在運行

MERGE INTO arinvt_lot_docs ALD 
USING 
(SELECT arinvt.id,arinvt.class,fgmulti.in_date fgmulti.cuser3 FROM arinvt,fgmulti 
WHERE arinvt.class LIKE 'CP%' 
OR arinvt.class LIKE 'FG%' 
OR arinvt.class LIKE 'IN%' 
OR arinvt.class LIKE 'LA%' 
OR arinvt.class LIKE 'PK%') Classes 
ON (ALD.arinvt_id = classes.id 
AND to_date(in_date) = '31-Dec-2015') --just picked a date to validate 
WHEN MATCHED THEN 
UPDATE SET non_conform_id = '21', fgmulti.cuser3 = 'SCRIPTED' --this text "Scripted" will fill in a field that will tell us in our reports if this was set by the script 

我會喜歡用所有3個表ARINVT_LOT_DOCS,FGMULTI &顯然ARINVT中存在的arinvt.id字段來加入表。 ARINVT_LOT_DOCS & FGMULTI包含需要更改爲'21'的NON_CONFROM_ID字段。 FGMULTI表格還包含將在其中輸入「SCRIPTED」的CUSER3字段。 ARINVT表包含在所述條件下反映的庫存項目的類別。

+0

與這個問題沒有關係,但是你的使用條款似乎在arinvt和fgmulti之間有一個交叉連接 - 沒有連接條件。那是故意的嗎? –

+0

我聽說我可能需要一個TRANSACTION,但我沒有找到精確的Oracle文章描述語法 –

+0

我不知道表之間的關係是什麼,所以不知道你應該如何加入他們。與你所展示的內容沒有明顯的聯繫,但其他欄目可能是相關的。也許可以將表定義(包括鍵)和一些示例數據添加到問題中,以便更容易地看到您正在嘗試執行的操作。 –

回答

0

您不能在Oracle和其他DBMS(如SQL Server)中的一個查詢中更新兩個表,但可以使用事務來實現類似的結果。

This oracle community答案正是,如果你試圖連接兩個表,你會得到這個錯誤

ORA-01776:無法通過連接視圖修改多個基表

你可以使用transactions以批處理語句更新兩個表。

這個https://stackoverflow.com/a/2044520顯示瞭如何做,但是對於SQL Sever。您需要在Oracle中使用類似的語句。