【问题标题】:Oracle SQL - "missing keyword"Oracle SQL - “缺少关键字”
【发布时间】:2019-04-13 03:13:20
【问题描述】:

我正在尝试在 Oracle SQL 中创建一个简单的表。对应的代码在 SQL 管理工作室中运行良好,但在 Oracle APEX 中却不行。

以下查询:

CREATE TABLE Conference(
ConferenceID NUMBER GENERATED ALWAYS AS IDENTITY
(START WITH 100
INCREMENT BY 10
MINVALUE 100
MAXVALUE 100000
NO CYCLE),
Director VARCHAR(25) NOT NULL,
School Size NUMBER NOT NULL,
Location VARCHAR(50) NOT NULL,
CONSTRAINT pk_Conference PRIMARY KEY (ConferenceID)
);

反复遇到以下错误:

ORA-02000: 缺少 ( 关键字

我已尽职尽责地寻找解决此问题的方法 hereherehere

我检查了标识列部分以及主键语法here,一切看起来都正确。尽管如此,我还是找不到解决办法。

【问题讨论】:

  • 您是否尝试将列名和表名放在引号中?还有你正在开发的版本是什么?
  • 我目前使用的是 Oracle APEX 19.1
  • 1.在 Oracle 中,您需要使用 varchar2,而不是 varchar。 2 "School Size" 不是 School Size但是 - 不要创建带有空格的字段。 3.NUMBER(X),不是NUMBER

标签: sql oracle


【解决方案1】:

好的,在文档中,查看identity options 的列定义。在这种情况下,这是一个小错字 - NOCYCLE 选项是一个单词;没有空间了。

您还有另一个问题,即School Size 不是有效的列名。里面有空格,没有引用。您可以使用School_Size"School Size"。我推荐第一个,因为双引号的列名区分大小写并且真的使用起来很烦人。

编辑:另外,they're technically synonyms, but Oracle recommends using VARCHAR2 instead of VARCHAR

CREATE TABLE Conference(
    ConferenceID NUMBER GENERATED ALWAYS AS IDENTITY
    (START WITH 100
    INCREMENT BY 10
    MINVALUE 100
    MAXVALUE 100000
    NOCYCLE),
    Director VARCHAR2(25) NOT NULL,
    School_Size NUMBER NOT NULL,
    Location VARCHAR2(50) NOT NULL,
    CONSTRAINT pk_Conference PRIMARY KEY (ConferenceID)
);

【讨论】:

  • 优秀的答案。非常感谢 Kfinity。
  • 很好地抓住了 VARCHAR/VARCHAR2。如果我没记错文档,Oracle 说使用 VARCHAR2,因为 VARCHAR 的行为可能会在未来的实现中发生变化。
猜你喜欢
  • 2012-09-26
  • 2016-11-09
  • 2018-02-24
  • 2021-01-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多