【问题标题】:Missing right parenthesis error (ORA-00907: missing right parenthesis)缺少右括号错误(ORA-00907:缺少右括号)
【发布时间】:2015-03-31 20:03:33
【问题描述】:

我正在尝试创建一个表,但收到错误“ORA-00907:缺少右括号”。

CREATE TABLE data_create (
studentid NUMBER(9) PRIMARY KEY,
name      VARCHAR(25) NOT NULL,
program   CHAR(4)
CONSTRAINT check_program
CHECK (program = 'CP', 'CPA', 'CSTC', 'CSTY'),
dob       DATE,
email     VARCHAR(20)
CONSTRAINT check_email UNIQUE (email),
phone     NUMBER(10),
feepaid   NUMBER(6)
CONSTRAINT check_feepaid
CHECK (feepaid BETWEEN 0 and 9999.99)
)

我尝试了几种不同的方法,但无法消除错误。我是 oracle 的新手,对语法不是很熟悉。谁能告诉我我做错了什么? 谢谢!

【问题讨论】:

  • 'CPA 缺少 '
  • (program = 'CP', 'CPA', 'CSTC', 'CSTY'),CHECK (program = 'CP' || 'CPA || 'CSTC' || 'CSTY'), 一样错误 - 为什么不使用 Gordon 提供的正确语法?

标签: sql oracle syntax-error


【解决方案1】:

这个表达式应该是什么?

CHECK (program = 'CP' || 'CPA || 'CSTC' || 'CSTY'),

在 Oracle 中,|| 是字符串连接。也许你的意思是:

CHECK (program IN ('CP', 'CPA', 'CSTC', 'CSTY'),

可能还有其他错误,但这个比较突出。

编辑:

以下适用于SQL Fiddle

CREATE TABLE data_create (
    studentid NUMBER(9) PRIMARY KEY,
    name      VARCHAR2(25) NOT NULL,
    program   CHAR(4)
    CONSTRAINT check_program CHECK (program IN ('CP', 'CPA', 'CSTC', 'CSTY')),
    dob       DATE,
    email     VARCHAR2(20) UNIQUE,
    phone     NUMBER(10),
    feepaid   NUMBER(6)
    CONSTRAINT check_feepaid
        CHECK (feepaid BETWEEN 0 and 9999.99)
)

注意,我将字符串更改为 varchar2(),这是 Oracle 推荐的。我还建议您将phone 更改为字符串,以便它可以处理前导零。

【讨论】:

  • 另请注意,此解决方案有一个结束单引号 CPA
  • 改了并添加了缺失的',还是报错
  • @Andrew 'CSTY'), -> 'CSTY')),
猜你喜欢
  • 2016-10-23
  • 1970-01-01
  • 2013-05-12
  • 2014-03-25
  • 2018-05-23
  • 2018-12-06
相关资源
最近更新 更多