3

我收到流动错误:

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"

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

4

2 回答 2

9

似乎您在 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中演示了上述观点

于 2012-11-11T06:15:29.190 回答
0

尝试这个:

INSERT
    WHEN city='palanpur' THEN INTO Ashish 
    When city='Aburoad' THEN INTO abhi
SELECT no, name
    FROM arpit;
于 2018-03-19T12:39:31.937 回答