缺少右括号错误(ORA-00907: 缺少右括号)
Missing right parenthesis error (ORA-00907: missing right parenthesis)
我正在尝试创建 table,但出现错误 "ORA-00907: missing right parenthesis"。
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 的新手,对语法不是很熟悉。谁能告诉我我做错了什么?
谢谢!
这个表达式应该是什么?
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)
)
请注意,我将字符串更改为 Oracle 推荐的 varchar2()
。我还建议您将 phone
更改为字符串,以便它可以处理前导零。
我正在尝试创建 table,但出现错误 "ORA-00907: missing right parenthesis"。
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 的新手,对语法不是很熟悉。谁能告诉我我做错了什么? 谢谢!
这个表达式应该是什么?
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)
)
请注意,我将字符串更改为 Oracle 推荐的 varchar2()
。我还建议您将 phone
更改为字符串,以便它可以处理前导零。