插入错误ORA - 00984

时间:2014-10-27 01:48:47

标签: sql oracle

我插入了一个简单的sql脚本,如下所示,它给我一个错误

SQL Error: ORA-00984: column not allowed here
00984. 00000 -  "column not allowed here"

insert into tableA values (id, colA, colB) 
values ( (select max(id)+1 from tableA), 'First Name', 'Second Name');

Table definition

id - number(15,0)
colA - varchar2(50)
colB - varchar2(50)

以下脚本适用于具有相同表定义的另一个表,但只是列数不同。我猜测(从tableA中选择max(id)+1)导致错误,任何人都可以帮忙吗?还是有其他解决方案?感谢

1 个答案:

答案 0 :(得分:4)

首先,您只需要一个values子句

insert into tableA (id, colA, colB) 
values ( (select max(id)+1 from tableA), 'First Name', 'Second Name');

这将解决您的直接问题。也就是说,通过从表中执行max(id) + 1创建主键是一种可怕的做法 - 它不适用于多用户环境,并且它不会扩展。你真的,真的想创建一个序列并使用该序列来生成你的密钥

create sequence tableA_seq
  start with 1
  increment by 1
  cache 20;

insert into tableA( id, colA, colB )
  values( tableA_seq.nextval, 'First Name', 'Second Name' );

此外,我强烈建议您不要使用id作为列名。像tableA_id之类的东西更有意义。当您开始编写涉及多个不同表的查询时,如果tableA_id与父表和所有子表中的名称相同,并且您不必工作时,则会使生活变得更加轻松找出哪些id列代表哪些概念。