【问题标题】:what does the error "missing right parenthesis" in oracle sql meansoracle sql中的错误“缺少右括号”是什么意思
【发布时间】:2018-11-23 19:05:47
【问题描述】:

我正在尝试运行此代码,它对我来说似乎是正确的,但我收到一条错误消息,指出缺少右括号。

代码如下:

CREATE TABLE CUSTOMER
(
    CUSTOMER_ID     INT NOT NULL,
    NAME            VARCHAR(30) NOT NULL,
    DATE_OF_BIRTH   DATE,
    PHONE_NB        CHAR(8) NOT NULL,
    ADDRESS         VARCHAR(50),
    TOTAL_SPENDING  FLOAT NOT NULL DEFAULT 0.0,

    PRIMARY KEY(CUSTOMER_ID)
);

谁能帮我解决我的问题?

【问题讨论】:

  • 我不是 Oracle 专家,但我认为 DEFAULT 0.0 应该在 NOT NULL 之前。 Oracle 中 CREATE TABLE DDL 中的这些“缺少右括号” 错误几乎总是这样的语法错误。
  • 标准字符串类型是VARCHAR2,而不是VARCHARCHAR。不要使用CHAR,除非您确实希望将值填充为空白(相信我,没有人会这样做)。

标签: sql oracle oracle11g oracle-sqldeveloper


【解决方案1】:

既然你标记了 SQL Developer...

...该工具会尝试提示您在您点击执行按钮之前会出现问题

该列的默认值会使解析器感到困惑,因为此时它不是预期的。

将它移到数据类型之后,你会很好

CREATE TABLE customer (
    customer_id      INT NOT NULL,
    name             VARCHAR2(30) NOT NULL,
    date_of_birth    DATE,
    phone_nb         CHAR(8) NOT NULL,
    address          VARCHAR(50),
    total_spending   FLOAT DEFAULT 0.0 NOT NULL,
    PRIMARY KEY ( customer_id )
);

PS 在 oracle 中,使用 VARCHAR2,而不是 VARCHAR。虽然 VARCHAR 会“工作”,但它是保留的,在未来的版本中可能意味着不同的东西。

【讨论】:

  • 只是注释:CUSTOMER_ID 不必设置为 NOT NULL,因为它是主键列,并且主键无论如何都不允许 NULL。
  • @Littlefoot 不错 :)
  • 我不了解其他人,但我与对主键的三个属性(唯一、非空、不变)非常模糊的人一起工作。因此,我经常在主键上包含一个 NOT NULL 约束,只是为了说明本列中不允许 NULL 的想法。
  • 它不会伤害任何东西,可能
【解决方案2】:

您使用了错误的列定义子句顺序:约束 (NOT NULL) 应遵循默认值。

这是正确的方法:

CREATE TABLE CUSTOMER
(
    CUSTOMER_ID     INT NOT NULL,
    NAME            VARCHAR(30) NOT NULL,
    DATE_OF_BIRTH   DATE,
    PHONE_NB        CHAR(8) NOT NULL,
    ADDRESS         VARCHAR(50),
    TOTAL_SPENDING  FLOAT DEFAULT 0.0 NOT NULL ,

    PRIMARY KEY(CUSTOMER_ID)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 2018-09-29
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多