缺少右括号错误(ORA-00907:缺少右括号)

时间:2015-02-01 21:34:13

标签: sql oracle syntax-error

我正在尝试创建一个表,我收到错误“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的新手,对语法不是很熟悉。谁能告诉我我做错了什么? 谢谢!

1 个答案:

答案 0 :(得分:2)

这个表达式应该是什么?

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更改为字符串,以便它可以处理前导零。