Oracle相当于INSERT IGNORE

时间:2013-05-07 08:39:33

标签: sql syntax insert oracle11g ignore

我在Oracle Equivalent to MySQL INSERT IGNORE?找到了一个非常相似的主题 但是,我无法完成任何提议的解决方案。我的情况有点特殊,因为我的表只包含1个字段,这是主键。我们在下面调用字段“id”和表“myTable”。

使用MERGE

merge into myTable t1 from (
    select 42 as the_pk_value, 'TEST' as some_column from dual
) t2 on (t1.id = t2.the_pk_value)
when not matched then 
    insert (id) values (t2.the_pk_value);

第一次尝试会出现SQL Error: ORA-02012: missing USING keyword错误消息。我不得不承认我不理解建议的语法,所以也许我在适应我的pk-only-table时搞砸了。但由于显示的示例没有使用任何USING关键字,我不明白我的错误在哪里。

使用提示

insert /*+ ignore_row_on_dupkey_index(SPSECU, PK_SPSECU) */ into myTable (id) values ('TEST');

这确实可以通过SQL Developer工作,但它不能用于Java(我怀疑OJDBC驱动程序删除了注释以减少传输大小.BTW我无法弄清楚我正在使用哪个JDBC驱动程序... Spring工具源代码包似乎在没有任何进一步配置的情况下连接到Oracle数据库。我看到只安装了一个DERBY默认驱动程序。

使用NOT EXISTS

我无法使这种语法有效。这是我写的:

insert into myTable (id) values ('TEST') where not exists (select id from myTable where id='TEST');

此版本出现SQL Error: ORA-00933: SQL command not properly ended错误。

使用插入选择

我对knagaev提出的解决方案一无所知...试图将它改编到我的桌子上给了我这个:

insert into myTable t1 select id from myTable t2 where not exists (select 1 from t1 where t1.id = 'TEST');

有人能帮助我吗?我已经习惯了MySQL INSERT IGNORE的简单语法,而且在Oracle上很新(使用11g版本)。

1 个答案:

答案 0 :(得分:1)

合并使用using代替from

merge into myTable t1 USING (
    select 42 as the_pk_value, 'TEST' as some_column from dual
) t2 on (t1.id = t2.the_pk_value)