通过SQL命令行创建表,无效的标识符

时间:2014-12-22 13:50:57

标签: sql database oracle oracle11g

我正在学习SQL,我在我的系统上安装了oracle 11g express。我正在尝试创建一个表,但是当我尝试运行以下命令时,我收到以下错误消息:

第3行的错误: ORA-00904:无效标识符

CREATE TABLE PROJECTS (
    proID       NUMBER(4) NOT NULL,
    Desc        CHAR(20),
    sDate       DATE,
    eDate       DATE,
    Budget      NUMBER(7,2),
    maxStaff    NUMBER(2)
);

有人可以告诉我我做错了吗?

感谢所有回复,我成功运行了这个命令:

CREATE TABLE PROJECTS (
    proID       NUMBER(4) NOT NULL,
    description CHAR(20),
    sDate       DATE,
    eDate       DATE,
    Budget      NUMBER(7,2),
    maxStaff    NUMBER(2)
);

真的感谢快速回复!

克里斯

3 个答案:

答案 0 :(得分:1)

您有DESC作为列名。虽然你可以使用它,但你必须用引号括起来:

CREATE TABLE PROJECTS (
    proID       NUMBER(4) NOT NULL,
    "Desc"        CHAR(20),
    sDate       DATE,
    eDate       DATE,
    Budget      NUMBER(7,2),
    maxStaff    NUMBER(2)
);

每次在查询中调用时,您还必须使用引号。我建议只将该列更改为其他内容(可能是DESCRIPTION?)

答案 1 :(得分:1)

由于DESC是保留字,因此必须用双引号将其括起来。

但是,我不建议对字段名称使用保留字,也许会更改为描述或类似的东西

答案 2 :(得分:1)

正如已经多次说过的那样,错误是由于使用保留关键字 unquoted 作为标识符引起的。为了完整起见:

  • Oracle令人印象深刻list of reserved keywords
  • 不带引号的标识符由Oracle内部转换为大写。
  • 带引号的标识符区分大小写

所以:

  

CREATE TABLE T(DESC INT);

     

ORA-00904 ::标识符无效DESC是关键字

  

CREATE TABLE T(Desc INT);

     

ORA-00904 ::无效标识符与不带引号标识符相同的原因全部转换为大写

  

CREATE TABLE T(" DESC" INT);

     使用引号

创建表格"DESC"不再被视为保留关键字

     

INSERT INTO T(" Desc")VALUES(1);

     

ORA-00904:" Desc":无效标识符带引号的标识符区分大小写。 "DESC""Desc"

的列不同      

INSERT INTO T(" DESC")VALUES(1);

     

已插入1行

话虽如此,你应该避免使用关键字作为标识符......