Sql Oracle等价于INSERT IGNORE

Sql Oracle等价于INSERT IGNORE,sql,syntax,insert,oracle11g,ignore,Sql,Syntax,Insert,Oracle11g,Ignore,我在网上发现了一个非常相似的话题 然而,我无法使任何提议的解决方案生效。我的案例有点特殊,因为我的表只包含1个字段,这是主键。下面让我们调用字段“id”和表“myTable” 使用合并 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 inse

我在网上发现了一个非常相似的话题 然而,我无法使任何提议的解决方案生效。我的案例有点特殊,因为我的表只包含1个字段,这是主键。下面让我们调用字段“id”和表“myTable”

使用合并

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错误:ORA-02012:missing USING关键字
错误消息。我必须承认,我不理解提议的语法,所以在适应我的pk only表时,可能我弄错了什么。但是,由于演示的示例没有使用任何
USING
关键字,我不明白我的错误在哪里

使用提示

insert /*+ ignore_row_on_dupkey_index(SPSECU, PK_SPSECU) */ into myTable (id) values ('TEST');
这确实可以通过SQL Developer实现,但不能通过Java实现(我怀疑OJDBC驱动程序删除了注释以减少传输大小。顺便说一句,我无法确定我使用的是哪个JDBC驱动程序…Spring工具源代码包似乎在没有进一步配置的情况下连接到Oracle数据库。我只看到安装了DERBY默认驱动程序

使用不存在

我无法使用这种语法。下面是我写的:

insert into myTable (id) values ('TEST') where not exists (select id from myTable where id='TEST');
我得到一个
SQL错误:ORA-00933:SQL命令没有正确结束此版本的
错误

使用插入选择

insert /*+ ignore_row_on_dupkey_index(SPSECU, PK_SPSECU) */ into myTable (id) values ('TEST');
我对knagaev提出的解决方案一点也不了解……试图将其调整到我的表格中给了我以下信息:

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

有人能帮我吗?我习惯于MySQL插入忽略简单语法,对Oracle(使用11g版本)非常陌生。

合并使用
使用
而不是
中的

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)

合并使用
使用
而不是
中的

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)

使用SQL Developer确实可以使用您的语法。但是……由于某种原因,从Java调用时会出现违反的
ORA-00001:unique约束(PK_MYTABLE)
。错误消息确实会打印出确切的SQL查询,并且在SQL Developer中复制粘贴它时效果会非常好(第一条消息:
1行合并。
以下消息:
0行合并。
)。有什么想法吗?不确定,我不是Java专家。也许用代码片段发布一个新的Java问题?我怀疑Oracle驱动程序有问题……现在我接受你的解决方案,你给了我一个有效的Oracle答案(即使通过Java调用失败)。使用SQL Developer确实可以使用您的语法。但是……由于某种原因,从Java调用时会出现违反的
ORA-00001:unique约束(PK_MYTABLE)
。错误消息会打印出确切的SQL查询,并且在SQL Developer中复制粘贴时,它会完美地工作(第一条消息:
1行合并。
以下消息:
0行合并。
)。有什么想法吗?不确定,我不是Java专家。也许用代码片段发布一个新的Java问题?我怀疑Oracle驱动程序有问题……现在我接受你的解决方案,你给了我一个有效的Oracle答案(即使通过Java调用失败)。