sql >> Databasteknik >  >> RDS >> Oracle

Oracle infoga om rad inte finns

När jag kör detta får jag felmeddelandet "missing INTO keyword" .

Eftersom IGNORE inte är ett nyckelord i Oracle. Det är MySQL-syntaxen.

Vad du kan göra är att använda MERGE.

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)
/

Från Oracle 10g kan vi använda merge utan att hantera båda grenarna. I 9i var vi tvungna att använda en "dummy" MATCHED gren.

I äldre versioner var de enda alternativen antingen :

  1. testa för radens existens innan du utfärdar en INSERT (eller i en underfråga);
  2. att använda PL/SQL för att köra INSERT och hantera eventuella DUP_VAL_ON_INDEX-fel.


  1. SQL Server:Extrahera tabellmetadata (beskrivning, fält och deras datatyper)

  2. Hur man dödar en körande SELECT-sats

  3. Hur tar man bort nya radtecken från datarader i mysql?

  4. Kan SQL Server Express LocalDB fjärranslutas till?