使用union all插入和nextval不能使用重复值

时间:2017-05-02 17:33:14

标签: sql oracle insert-into union-all

我想在一个insert into语句中使用Oracle SQL在表中插入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 个答案:

答案 0 :(得分:1)

由于第二个示例中的值不同,您必须为列创建别名才能执行insert语句。

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

请参阅示例here

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

enter image description here