将列留出Oracle插入语句

时间:2015-05-14 15:35:51

标签: oracle

我有一个插入语句,我试图对Oracle数据库运行。 insert语句非常简单,我只想在一列中插入一个值。表本身有多个列,但我只对填充其中一列数据感兴趣。我的查询格式类似于下面的格式:

insert into myTable (col1) Values (val1)

但是,这会引发以下错误:

ORA-00904: "col1": invalid identifier

我已经检查过以确保列名称正确,而我唯一的另一个想法就是我的语法出了问题。表上没有约束,例如主键。在Oracle中执行insert语句时,是否可以仅将值插入某些列?

3 个答案:

答案 0 :(得分:4)

检查在创建表时是否没有引用列名。如果您这样做,列名称将在您引用时存储。例如:

create table table1 (
id number(2)
)

具有与此

不同的列名
create table table2 (
"id" number(2)
)

Oracle默认以大写形式存储(未引用的)列名。引用按原样存储。

您可以使用DESC table_name查看列的存储方式。

以下

select id from table1
select iD from table1
select ID from table1

获取记录,只有

select "id" from table2

将获取记录。

select id from table2

会抛出ORA-00904 : "ID" : invalid identifier错误。

使用下面建立的工具时,您可能在创建过程中无意中完成了引用:

https://community.oracle.com/thread/2349926

顺便说一句:是的,只要其他列没有NOT NULL约束,就可以只插入一列的记录。

答案 1 :(得分:1)

实际上,我认为您可能会双重引用insert语句中的列(而不是创建表),尽管您的示例具有误导性。我想这是因为你的错误,说“col1”无效,而不是“COL1”无效。考虑这个简单的测试:

SQL> create table mytable
(
col1 varchar2(10)
)
Table created.
SQL> -- incorrect column name, without double quotes
SQL> insert into mytable(col2) values ('abc')
insert into mytable(col2) values ('abc')
Error at line 9
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 11
ORA-00904: "COL2": invalid identifier
SQL> -- incorrect column name, with double quotes
SQL> insert into mytable("col2") values ('abc')
insert into mytable("col2") values ('abc')
Error at line 12
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 11
ORA-00904: "col2": invalid identifier
SQL> -- correct column name, without double quotes (works)
SQL> insert into mytable(col1) values ('abc')
1 row created.
SQL> -- correct column name, with double quotes (fails)
SQL> insert into mytable("col1") values ('abc')
insert into mytable("col1") values ('abc')
Error at line 18
ORA-00604: error occurred at recursive SQL level 1
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at line 11
ORA-00904: "col1": invalid identifier

最后一次失败的插入尝试是我认为您可能正在做的事情:

insert into mytable("col1") values ...

基于错误消息:

ORA-00904: "col1": invalid identifier

因此解决方案只是删除插入中列名称周围的双引号。

答案 2 :(得分:0)

这很可能是语法错误

Desc myTable;
insert into myTable (col1) Values ('val1')

确保col1是表格中的有效列,您只是不想说“选择最左侧的列。”

编辑:在Oracle中执行insert语句时,是否可以只将值插入某些列?

是,如果您只想插入某些列,则只需指定它

e.g。

insert into myTable (col1, col2, col6) Values ('val1', 'val2', 'val3');

这仅在列本身没有NOT NULL约束时才有效 - 在这种情况下,它不允许值被消耗(除非再次出现默认值)。