【问题标题】:Creating table via SQL Command Line, invalid identifier通过 SQL 命令行创建表,标识符无效
【发布时间】:2015-02-20 15:09:06
【问题描述】:

我目前正在学习 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)
);

真的很感谢您的快速回复!

克里斯

【问题讨论】:

  • DESC是保留字,是ORDER BT中DESCENDING的缩写
  • 尝试使用 [Desc] 代替 Desc
  • 另外,请考虑不要缩写您的列名。你有 30 个字符可以使用,我建议使用所有字符。例如,将 sDate 扩展为 START_DATE。它将使视图/API 创建更易于阅读。
  • 在这里查看Oracle中的保留关键字列表:docs.oracle.com/cd/B19306_01/em.102/b40103/…
  • @KhurramAli, [identifier] 是非标准的,由 Microsoft SQL Server 使用,而不是 Oracle。

标签: sql database oracle oracle11g


【解决方案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?)

【讨论】:

  • 警告:一旦你这样做了,"Desc" 是区分大小写的,不像其他列名。
  • 你是对的。如果可以避免,建议不要使用这些类型的标识符。
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    所以:

    创建表 T (DESC INT);

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

    创建表 T (Desc INT);

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

    创建表 T ("DESC" INT);

    表创建使用引号,"DESC" 不再被识别为保留关键字

    插入 T("Desc") 值 (1);

    ORA-00904:“Desc”:标识符无效 带引号的标识符区分大小写。 "DESC""Desc" 不是同一列

    插入 T("DESC") 值 (1);

    插入 1 行

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      相关资源
      最近更新 更多