Determinare un MERGE risultato dichiarazione di Oracle SQL
Domanda
Follow-up a questa domanda
Questa (versione simile da vecchio link) funziona in SQL Server 2008, tuttavia, Oracle mi sta dando problemi:
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
non Oracle supporto OUTPUT $action;
? In caso contrario, c'è un'alternativa?
Soluzione
L'istruzione MERGE non emette i risultati, né supporta la clausola RETURNING
.
Tuttavia, che cosa si potrebbe fare è bandiera i record che sono interessati . Qualcosa di simile:
when matched update set .... merge_status = 'U'
when not matched insert ( ...., merge_status, ... ) values ( ...., 'I', .... )
Questo, naturalmente, è necessario disporre di una colonna aggiuntiva per catturare lo stato di fusione - che non è sempre auspicabile (soprattutto quando hai solo bisogno di queste informazioni in maniera transitoria, dire che per verificare i risultati della fusione).
Purtroppo, a mia conoscenza, questo è il meglio che si può fare.