2017-06-09 4 views
0

Ich lerne Oracle SQL und PL/SQL und ich frage mich, ob es gleichwertige Klausel 'merge = output' in Oracle oder einfach und effektive Möglichkeit, das gleiche Ergebnis zu haben.Equivalent Merge-Ausgabe in Oracle

Link zu guten explonation von sql server 'merge, output' stetment. 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 

Return (wie 'query')

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

Ist es gleichwertig Klausel 'fusionieren = Ausgang' in Oracle oder einfache und effektive Art und Weise das gleiche Ergebnis

+0

** [Bearbeiten] ** Ihre Frage und einige Beispieldaten hinzufügen und die erwartete Ausgabe auf der Grundlage dieser Daten. [** Formatierter Text **] (http://stackoverflow.com/help/formatting) bitte, [keine Screenshots] (http://meta.stackoverflow.com/questions/285551/why-may-i-not -upload-images-of-code-auf-so-wenn-eine Frage zu stellen/285557 # 285557). Veröffentlichen Sie keinen Code oder zusätzliche Informationen in Kommentaren –

+0

meine Frage ist über Orakel-Syntax ich weiß mehr oder weniger, wie Efeed wie Merge-Ausgabe von SQL-Server zu implementieren, aber ich finde keine Informationen, wenn in Orakel clausle outup in Merge oder einfachen Weg zu existieren TU das. Ich kann Beispieldaten hinzufügen, aber ich denke nicht, dass dies ein guter Weg ist, um Daten zu reparieren. In hinzugefügten Link ist die Form der Rückgabedaten von Merge-Ausgabe-Sql-Server –

+0

ausgesetzt Ich habe keine Ahnung, was diese "Merge-Ausgabe" sein soll (und wahrscheinlich viele andere Leute mit Oracle auch nicht). Sie müssen uns sagen, welches Problem Sie lösen möchten. Es kann sein, dass der Ansatz, den Sie in SQL Server gewählt haben, in Oracle nicht verfügbar ist, oder dass dieses Problem in Oracle auf eine völlig andere Weise gelöst werden kann. Am besten beschreiben Sie das eigentliche Problem und illustrieren dies an einem Beispiel. Sie können nicht erwarten, dass Oracle-fähige Personen auch alles über SQL Server wissen. –

Antwort

0

Die Nähe haben Oracle-Äquivalent, das ich kenne, ist die RETURNING-Klausel, aber anscheinend nicht für MERGE-Anweisungen unterstützt:

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

Die aktuelle doco tut Referenz able „Ja, kehrt in nicht für merge unterstützt [...] Wenn Sie diese Funktionalität wollen, eine Erweiterung Antrag stellen“ ist der loggt Fehler, aber das ist eindeutig nicht ganz das, was Sie (oder I) sind nach :-(

Die error_logging_clause Sie Fehler und die Protokoll Spaltenwerte der betroffenen Zeilen erfassen DML können und in einer FehlerprotokollierungspeichernTabelle.

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