Ermittlung eines Oracle SQL Merge -Erklärungsergebnisses
Frage
Follow -up zu diese Frage
Diese (ähnliche Version aus dem alten Link) funktioniert jedoch in SQL Server 2008, Oracle gibt mir jedoch Probleme:
MERGE INTO wdm_test
USING ( select '10000000000000000000000000000000' Guid from DUAL ) val
ON ( wdm_test.Guid = val.Guid )
WHEN MATCHED THEN UPDATE SET test_column = null
WHEN NOT MATCHED THEN
INSERT (Guid, test_column)
VALUES ('10000000000000000000000000000000', null)
OUTPUT $action;
SQL Error: ORA-00933: SQL command not properly ended
Unterstützt Oracle nicht? OUTPUT $action;
? Wenn nicht, gibt es eine Alternative?
Lösung
Die Merge -Erklärung gibt die Ergebnisse weder aus noch unterstützt sie die RETURNING
Klausel.
Was Sie jedoch tun könnten, ist Markieren Sie die betroffenen Aufzeichnungen. Etwas wie:
when matched update set .... merge_status = 'U'
when not matched insert ( ...., merge_status, ... ) values ( ...., 'I', .... )
Dies erfordert natürlich, dass Sie eine zusätzliche Spalte haben, um den Zusammenführungsstatus zu erfassen - was nicht immer wünschenswert ist (insbesondere wenn Sie diese Informationen nur vorübergehend benötigen, um die Ergebnisse der Zusammenführung zu überprüfen).
Meines Wissens ist dies leider das Beste, was Sie tun können.