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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top