2017-06-09 25 views
0

我正在學習oracle sql和pl/sql,我想知道在Oracle中是否有等價的子句'merge = output'或簡單有效的方法來得到相同的結果。在oracle中等效合併輸出

鏈接到sql server'merge,output'stetment良好的explonation。 link

--sql server merge 
    MERGE #c_new AS trg 
    USING #c_base AS src 
     ON trg.Num_id = src.Num_id 
    WHEN MATCHED) 
    THEN 
     UPDATE SET 
      trg.Name = src.Name 
     ,trg.Name_type = src.Name_type 
    WHEN NOT MATCHED BY trg 
    THEN 
     INSERT (Num_id, Name, Name_type) 
     VALUES (Num_id, src.Name, src.Name_type) 
    WHEN NOT MATCHED BY src THEN DELETE 
    ------------output clause from here--------------- 
    OUTPUT 
     $ACTION, 
     inserted.Name NewName, 
     deleted.Name PrevName, 
     inserted.Name_type NewName_type, 
     deleted.Name_type PrevName_type 

返回(如 '查詢')

$action NewName PrevName NewName_type PrevName_type 
INSERT Abc1    Tp1 
DELETE   Abc2     Tp2 
UPDATE Abc4  Abc3  Tp4   Tp3 

是Oracle或簡單而有效的方式,它相當於條款 '合併=輸出' 具有相同的結果

+0

** [編輯] **你的問題,並添加基於該數據的一些樣本數據和預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[無屏幕截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload圖像-的代碼上那麼當-要價-A-問題/ 285557#285557)。不要發表評論的代碼或額外的信息 –

+0

我的問題是關於oracle語法我知道或多或少如何實現效果從sql server合併輸出,但我不發現信息,如果在oracle存在clausle outup合併或簡單的方法去做。我可以添加示例數據,但我不認爲是修復數據的好方法。在添加的鏈接是從合併輸出接觸的SQL服務器返回數據的暴露形式 –

+0

我不知道什麼是「合併輸出」應該是(可能許多其他人使用Oracle也不)。你需要告訴我們你想要解決什麼問題。這可能是您在SQL Server中採用的方法在Oracle中不可用,或者可以在Oracle中以完全不同的方式解決該問題。最好的辦法是描述實際問題並用一個例子來說明。你不能指望熟練使用Oracle的人也**知道關於SQL Server的所有信息。 –

回答

0

最接近相當於我所知的Oracle是RETURNING子句,但顯然不支持MERGE語句:

「是的,返回到不支持合併[...]如果你想要這個 功能,提出增強請求」

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:9528727800346317168

目前DOCO做參考能夠記錄該錯誤,但是這顯然你(或我)不是很追求的:-(

的error_logging_clause讓你捕捉DML錯誤和受影響的行數 列值,並將其保存在錯誤記錄 表。

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/MERGE.html#GUID-5692CCB7-24D9-4C0E-81A7-A22436DC968F