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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top