我插入了一个简单的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)导致错误,任何人都可以帮忙吗?还是有其他解决方案?感谢
答案 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
列代表哪些概念。