sql >> Database teknologi >  >> RDS >> Oracle

Oracle indsæt, hvis række ikke eksisterer

Når jeg kører dette, får jeg fejlen "missing INTO keyword" .

Fordi IGNORER ikke er et nøgleord i Oracle. Det er MySQL-syntaks.

Hvad du kan gøre, er at bruge FLOT.

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

Fra Oracle 10g kan vi bruge merge uden at håndtere begge grene. I 9i skulle vi bruge en "dummy" MATCHED gren.

I mere gamle versioner var de eneste muligheder enten:

  1. test for rækkens eksistens, før du udsteder en INSERT (eller i en underforespørgsel);
  2. at bruge PL/SQL til at udføre INSERT og håndtere eventuelle resulterende DUP_VAL_ON_INDEX-fejl.


  1. Hibernate, Postgresql:Kolonne x er af typen oid, men udtryk er af typen byte

  2. Installation af MySQL på CentOS 7

  3. 3 måder at adskille år, måned og dag fra en dato i MariaDB

  4. Vælg flere kolonner fra to tabeller ved hjælp af greendao