【问题标题】:ORA-00904 when inserting/querying data from tables从表中插入/查询数据时出现 ORA-00904
【发布时间】:2012-10-30 21:40:45
【问题描述】:

我收到了流动错误:

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, ' ');

所以我暂时删除了body数据然后报错

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"

我有名为 year 和 body 的列,但我遇到了错误。我怎样才能解决这个问题?

【问题讨论】:

  • 那么我该如何解决这个问题,我对 ocracle 和 sql 还很陌生
  • @MitchWheat 更像是 OP 在标识符用引号括起来时遇到了 Oracle 区分大小写的特性

标签: sql database oracle11g


【解决方案1】:

试试这个:

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

【讨论】:

  • 这是什么意思?
【解决方案2】:

似乎您在 DDL 中的引号下指定了列名。

Oracle 将引号下的标识符视为区分大小写,因此创建列名称为“body”或“year”的表将无法解析查询中的 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中证明了以上几点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2015-02-17
    相关资源
    最近更新 更多