使用 union all 插入,并且 nextval 不适用于重复值

Posted

技术标签:

【中文标题】使用 union all 插入,并且 nextval 不适用于重复值【英文标题】:Insert into with union all and nextval doesn't work with duplicate values 【发布时间】:2017-05-02 17:33:13 【问题描述】:

我想使用 Oracle SQL 在一个 insert into 语句中的表中插入 2 行。

此代码有效:

insert into a_glw select tt.*, work_id_seq.nextval from 
    (select 11111, 'one text', 12345, 'new text', NULL, 
    'some text', 'nice text', 'test', 'text', 'great text' 
    from dual 
union all 
    select 11111, 'one text', 12345, 'new text', NULL, 
    'some text', 'nice text', 'test', 'text', 'great text' 
    from dual) tt;

当我将值 test 更改为 text 时,此代码会产生错误 00918. 00000 - "column ambiguously defined"

insert into a_glw select tt.*, work_id_seq.nextval from 
    (select 11111, 'one text', 12345, 'new text', NULL, 
    'some text', 'nice text', 'text', 'text', 'great text' 
    from dual 
union all 
    select 11111, 'one text', 12345, 'new text', NULL, 
    'some text', 'nice text', 'test', 'text', 'great text' 
    from dual) tt;

在一个 select 语句中插入相同的值似乎是个问题。我怎样才能解决这个问题?

【问题讨论】:

【参考方案1】:

由于第二个示例中的值不同,因此您必须为列设置别名才能执行插入语句。

在第一个示例中,test 是列值,它假定 test 作为默认列名,因为您没有提供别名。

查看示例here

如果您查看随附的屏幕截图,第二个示例是 TEXT 列重复两次,因为 select 语句将列值视为列名,因此您必须为列提供别名。

【讨论】:

以上是关于使用 union all 插入,并且 nextval 不适用于重复值的主要内容,如果未能解决你的问题,请参考以下文章

尝试使用 UNION ALL 插入临时表

union all是啥意思?

oracle union all啥意思?

我想使用 union all 进行插入,它有一列从序列中获取值

SQL Server 2012 上的可插入 UNION ALL VIEW

union和union all用法