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

时间:2012-11-10 23:44:52

标签: 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"

当我执行以下操作时

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

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

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"

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

2 个答案:

答案 0 :(得分:6)

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

Oracle认为引号下的标识符区分大小写,因此创建一个列名为“body”或“year”的表将无法解析查询中的正文或年份,因为当您省略引号时,它会考虑上层案例变体。

所以当你有这个:

 create table driver_case (registration varchar2(60), 
                      make varchar2(60),
                      model varchar2(60),
                      gvw number,
                      "year" number, 
                      "body" varchar2(60));

然后尝试做

select year, body from driver_case

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

您的解决方案?

  • 请勿在DDL
  • 中的引号下提及列名
  • 如果您忽略上述要点,那么必须在所有DML语句中提及引号下的列名。

我在此SQL Fiddle

中演示了上述观点

答案 1 :(得分:0)

试试这个:

INSERT
    WHEN city='palanpur' THEN INTO Ashish 
    When city='Aburoad' THEN INTO abhi
SELECT no, name
    FROM arpit;