我在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版本)。
答案 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)