我有一个Oracle CSV批量导入脚本。担心该文件可能包含逻辑上相同的数据,因此会引发唯一的密钥约束违规。
所以我认为触发器可能会起作用,只有在新的时候插入数据。这是我的触发器。
create or replace trigger no_double
before insert or update on test_table
for each row
declare
checkval number;
begin
select count(1) into checkval from test_table
where keyvalue = :new.keyvalue
if (checkval = 0) then
insert into test_table(keyvalue, field1)
values (:new.keyvalue, :new.field1);
end if;
end;
但是当然,一旦脚本实际向 test_table 插入新值,触发器就会重新触发,依此类推。
一种解决方法可能是在插入之后引入第二个表并在上复制数据。但是我希望有一个更优雅的解决方案,所以(如果确实可能)我怎样才能避免在数据库层插入重复的值(无声跳过也可以。)