Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle-Einfügung, wenn Zeile nicht vorhanden ist

Wenn ich dies ausführe, erhalte ich den Fehler "missing INTO keyword" .

Weil IGNORE kein Schlüsselwort in Oracle ist. Das ist MySQL-Syntax.

Was Sie tun können, ist MERGE.

zu verwenden
merge into table1 t1
    using (select 'value1' as value1 ,value2 
           from table2 
           where table2.type = 'ok' ) t2
    on ( t1.value1 = t2.value1)
when not matched then
   insert values (t2.value1, t2.value2)
/

Ab Oracle 10g können wir Merge verwenden, ohne beide Zweige zu behandeln. In 9i mussten wir einen "dummy" MATCHED-Zweig verwenden.

In älteren Versionen waren die einzigen Optionen entweder :

  1. prüfen, ob die Zeile existiert, bevor ein INSERT (oder in einer Unterabfrage) ausgegeben wird;
  2. zur Verwendung von PL/SQL zur Ausführung von INSERT und zur Behandlung aller resultierenden DUP_VAL_ON_INDEX-Fehler.