Fare una SQL insert in Oracle solo se il record non esiste

Ho una tabella su database Oracle con due campi come chiave primaria, id di tipo intero e state come varchar.

Vorrei poter fare in modo che le nuove insert di ogni record su questa tabella sia fatta solo se il record (con PK: id+state) non esista già; insomma una sorta di insert if not exist, qualcuno può aiutarmi? Grazie.

In Corso 1
Oracle 19-02-2019 1 Risposta 1979 Visite +1
Fabio Ascalese

Fabio Ascalese

Autore di questa domanda

Risposte ( 1 approvate )

  1. Danilo Calasanna
    0
    19-02-2019 22:05:32
    Rispondi

    Ciao Fabio, potresti usare il magical Oracle hint IGNORE_ROW_ON_DUPKEY_INDEX per questo scopo; hint magicamente salta l'inserimento delle righe (rows) duplicate, e normalmente causa un errore per violazione del vincolo di univocità (costraint) sulla chiave primaria 'ORA-00001: unique constraint violated'.

    Potresti scrivere una query per l'insert simile a questa:

    INSERT /*+ IGNORE_ROW_ON_DUPKEY_INDEX (MyTable (id, status)) */ into MyTable (id,state) 
    values( (1, 'A'),(2, 'B') );

    Di fatto dovresti ottenere su Oracle un comportamento come quello che cerchi, ovvero insert if not exist

Rispondi

Per poter rispondere a questa domanda, devi essere registrato e loggato sul sito, dopodichè compila il box sottostante cercando di essere il più chiaro ed esauriente possibile, la tua risposta potrebbe essere la soluzione che l'utente cerca ed essere contrassegnata come migliore, consentendoti così di ottenere punti ed autorevolezza.

 Domanda Precedente

 Elenco Domande 

Domanda Successiva