Oracle Equivalent to MySQL INSERT IGNORE?

后端 未结 8 2350
旧时难觅i
旧时难觅i 2020-11-27 07:24

I need to update a query so that it checks that a duplicate entry does not exist before insertion. In MySQL I can just use INSERT IGNORE so that if a duplicate record is fo

8条回答
  •  野趣味
    野趣味 (楼主)
    2020-11-27 07:47

    This one isn't mine, but came in really handy when using sqlloader:

    1. create a view that points to your table:

      CREATE OR REPLACE VIEW test_view
      AS SELECT * FROM test_tab
      
    2. create the trigger:

      CREATE OR REPLACE TRIGGER test_trig
       INSTEAD OF INSERT ON test_view
       FOR EACH ROW
        BEGIN
         INSERT INTO test_tab VALUES
          (:NEW.id, :NEW.name);
        EXCEPTION
         WHEN DUP_VAL_ON_INDEX THEN NULL;
        END test_trig;
      
    3. and in the ctl file, insert into the view instead:

      OPTIONS(ERRORS=0)
      LOAD DATA
      INFILE 'file_with_duplicates.csv'
      INTO TABLE test_view
      FIELDS TERMINATED BY ','
      (id, field1)
      

提交回复
热议问题