插入/查询表中的数据时ORA-00904

Mic*_*ael 2 sql database oracle11g

我收到了流动的错误:

Error starting at line 1 in command:
INSERT INTO driver (registration, make, model, gvw, year, body) VALUES('4585 AW','ALBION','RIEVER',20321,1963, ' ');
Error at Command Line:1 Column:53
Error report:
SQL Error: ORA-00904: "BODY": invalid identifier
00904. 00000 -  "%s: invalid identifier"
Run Code Online (Sandbox Code Playgroud)

当我做以下

INSERT INTO driver 
(registration, make, model, gvw, year) 
VALUES
('4585 AW','ALBION','RIEVER',20321,1963, ' ');
Run Code Online (Sandbox Code Playgroud)

所以我暂时删除了正文数据,然后给出了错误

Error starting at line 1 in command:
INSERT INTO driver (registration, make, model, gvw, year) VALUES('4585 AW','ALBION','RIEVER',20321,1963)
Error at Command Line:1 Column:53
Error report:
SQL Error: ORA-00904: "YEAR": invalid identifier
00904. 00000 -  "%s: invalid identifier"
Run Code Online (Sandbox Code Playgroud)

我的列都叫年和身体,但我收到错误.我怎样才能解决这个问题?

Sat*_*hat 7

好像您在DDL中的引号下指定了列名.

Oracle将引号下的标识符视为区分大小写,因此创建列名为"body"或"year"的表将无法解析查询中的正文或年份,因为当您省略引号时,它会考虑大写变体.

所以当你有这个:

 create table driver_case (registration varchar2(60), 
                      make varchar2(60),
                      model varchar2(60),
                      gvw number,
                      "year" number, 
                      "body" varchar2(60));
Run Code Online (Sandbox Code Playgroud)

然后尝试做

select year, body from driver_case
Run Code Online (Sandbox Code Playgroud)

然后Oracle尝试查找列"YEAR","BODY"(记住,没有带引号的标识符转换为大写),这与表中的"year","body"不同.

您的解决方案

  • 不要在DDL中引用引号下的列名
  • 如果忽略上述要点,则必须在所有DML语句中提及引号下的列名.

我在这个SQL小提琴中演示了上述观点