【问题标题】:ORA-00903: invalid table name when Creating TableORA-00903: 创建表时表名无效
【发布时间】:2020-11-12 11:31:31
【问题描述】:

请帮忙。我不确定发生了什么。我什至尝试删除表但仍然不成功。

CREATE TABLE 'customer' (
  'customer_id' int NOT NULL AUTO_INCREMENT,
  'type' varchar(45) NOT NULL,
  'name' varchar(45) NOT NULL,
  'cut_off' int NOT NULL,
  PRIMARY KEY ('customer_id')
)


Error starting at line : 1 in command -
CREATE TABLE 'customer' (
  'customer_id' int NOT NULL AUTO_INCREMENT,
  'type' varchar(45) NOT NULL,
  'name' varchar(45) NOT NULL,
  'cut_off' tinyint NOT NULL,
  PRIMARY KEY ('customer_id')
)
Error report -
ORA-00903: invalid table name
00903. 00000 -  "invalid table name"
*Cause:    
*Action:

【问题讨论】:

  • 表名和列名应该用双引号,而不是单引号。
  • @Barmar ... 或者甚至可能没有双引号,以防表名不是保留关键字。
  • @TimBiegeleisen 我不是 Oracle 用户,但我知道有时需要双引号,即使它不是保留字。我认为它与大小写有关。
  • @Barmer 您使用双引号使表名区分大小写,它还允许您违反其他表命名规则。每次引用该表时,都需要使用具有完全相同区分大小写名称的双引号。通常最好避免。默认情况下,不使用双引号,表名将以大写形式存储,并且可以不区分大小写引用(只要不使用双引号)。

标签: oracle


【解决方案1】:

列名和表名应不带引号。

参考创建表查询https://docs.oracle.com/cd/B28359_01/server.111/b28310/tables003.htm#ADMIN11004

【讨论】:

    【解决方案2】:

    您的代码中有多个问题。

    • 表和列的名称不应用单引号括起来。
    • 不允许使用 AUTO_INCREMENT 关键字。它应该在 oracle 中以不同的方式实现。
    • PK 列不需要NOT NULL。它是隐含的。

    更正的代码:

    CREATE TABLE customer (
      customer_id int GENERATED always as IDENTITY,
      type varchar(45) NOT NULL,
      name varchar(45) NOT NULL,
      cut_off int NOT NULL,
      primary key(customer_id)
    );
    

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 2016-07-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多