sql - 缺少右括号错误(ORA-00907 : missing right parenthesis)

标签 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的新手,并且对语法不是很熟悉。谁能告诉我我做错了什么?
谢谢!

最佳答案

这个表情应该是什么?

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)
)

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

关于sql - 缺少右括号错误(ORA-00907 : missing right parenthesis),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28268197/

相关文章:

sql - 如何在 SQL 中每列值只选择一行?

sql - 如何使用 group by 检索不同的数据

mysql - 有没有办法像oracle中的rownum一样获取Mysql中的行号

php - 当不需要分号时,我在PHP中得到解析错误代码

lua - 用Lua编写自动点击器脚本

php - 无法在数据库中存储文件详细信息

mysql - 查询以找出我没有的?

sql - 是否可以从我的 MySQL 数据库中的一个表中的一行中获取值并插入到同一数据库中的另一个表中?

sql - 如何在 SQL Server 表中插入 auto_increment 键

sql - 通过单点高效检索重叠的 IP 范围记录