【问题标题】:i cant create a table because name is invalid [duplicate]我无法创建表,因为名称无效 [重复]
【发布时间】:2021-04-30 21:38:52
【问题描述】:

我正在尝试创建一个名为“Order”和这些数据类型的表(注意:我没有一个名为 Order 的表,我尝试创建其他表并且它有效)并且名称是:

create table Order(
Onum    Number(8) PRIMARY KEY,
Odate   Date,
Otime   Time(7),
Delivered_on_time   char(1));

错误是:

无效的表名

所以我尝试将其命名为 Ordeer 并重试,它给了我这个错误:

ORA-00907: missing right parenthesis
  1. Otime   Time(7),
    
  2. Delivered_on_time   char(1)
    
  3. );

怎么办?请帮忙

【问题讨论】:

  • ORDER 是保留字,参见en.wikipedia.org/wiki/SQL_reserved_words。除非以"ORDER" 分隔,否则不能用作表名。但我会考虑ORDERS
  • Oracle 还列出了reserved words in the documentation。它列出了data typestime 不是其中之一。没有时间类型(无论如何您都可以使用),但您不需要,因为日期包括时间组件。
  • Oracle 没有TIME 数据类型。
  • @AlexPoole 您可以使用INTERVAL DAY TO SECOND 数据类型来表示时间。但在这种情况下,由于DATE 有一个时间组件,那么 OP 应该不需要尝试做类似的事情。
  • 也不推荐使用CHAR - 请改用VARCHAR2

标签: sql oracle oracle-apex


【解决方案1】:

首先,您不能调用表order,因为order 是保留字。 (有一个棘手的方法可以解决这个问题,但这样做是个坏主意。)

其次,DATE 类型还包括时间,因此您不需要单独的日期和时间列。

CREATE TABLE orders (
    onum              NUMBER(8) PRIMARY KEY,
    odate             DATE,
    delivered_on_time CHAR(1)
);

【讨论】:

  • 您可以致电表ORDER; OP 只需要使用带引号的标识符 "ORDER" 并在引用表时始终使用带引号的标识符(以及相同的情况)。说他们“不能”是错误的(但他们不应该这样做,因为这是不好的做法)。
猜你喜欢
  • 2021-11-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-18
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多