Oracle表创建缺少右括号

时间:2016-04-05 20:46:47

标签: oracle

这应该是一个非常简单的问题,但我只是看不出有什么问题。我试图在所述表上创建一个带有一些检查而不是空约束的表,但是在尝试执行命令时我得到了一个缺少右括号错误。

CREATE TABLE students (
     studentID NUMBER(5) PRIMARY KEY, 
    forename VARCHAR2(15) NOT NULL, 
    surname VARCHAR2(15) NOT NULL,
    street VARCHAR2(20),
    city VARCHAR2(15),
    postcode VARCHAR2(10) NOT NULL,
    dateOfBirth DATE() NOT NULL CHECK(dateOfBirth BETWEEN DATE '1999-01-01' AND SYSDATE), 
    gender VARCHAR2(10) CHECK(gender = 'male' OR gender = 'female' OR gender = 'both'),
    category VARCHAR2(15) NOT NULL CHECK(category = 'first year undergraduate' OR caregory = 'postgraduate'),
    fulltimeStudent VARCHAR(5) NOT NULL CHECK(fulltimeStudent = 'yes' OR fulltimeStudent = 'no'),
    nationality VARCHAR(25) NOT NULL,
    smoker VARCHAR(5) CHECK(smoker = 'yes' OR smoker = 'no') AND NOT NULL,
    specialNeeds VARCHAR(30),
    additionalComments VARCHAR(50),
    status VARCHAR(15) NOT NULL CHECK(status = 'placed' or status = 'waiting')
    );

以下完整错误 - enter image description here

1 个答案:

答案 0 :(得分:2)

“DATE()”不需要括号。 此外,您不能在检查约束中使用SYSDATE,您可能希望使用触发器,并且在“CAREGORY”处有拼写错误。

您可以像这样运行:

CREATE TABLE students (
     studentID NUMBER(5) PRIMARY KEY, 
    forename VARCHAR2(15) NOT NULL, 
    surname VARCHAR2(15) NOT NULL,
    street VARCHAR2(20),
    city VARCHAR2(15),
    postcode VARCHAR2(10) NOT NULL,
    dateOfBirth DATE NOT NULL, 
    gender VARCHAR2(10) CHECK(gender = 'male' OR gender = 'female' OR gender = 'both'),
    category VARCHAR2(15) NOT NULL CHECK(category = 'first year undergraduate' OR category = 'postgraduate'),
    fulltimeStudent VARCHAR(5) NOT NULL CHECK(fulltimeStudent = 'yes' OR fulltimeStudent = 'no'),
    nationality VARCHAR(25) NOT NULL,
    smoker VARCHAR(5) NOT NULL CHECK(smoker = 'yes' OR smoker = 'no'),
    specialNeeds VARCHAR(30),
    additionalComments VARCHAR(50),
    status VARCHAR(15) NOT NULL CHECK(status = 'placed' or status = 'waiting')
    );

在检查约束中对sysdate进行编辑添加的文档引用: https://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm

  

检查条件的条件不能包含以下内容   构建体:

Subqueries and scalar subquery expressions

Calls to the functions that are not deterministic (CURRENT_DATE, CURRENT_TIMESTAMP, DBTIMEZONE, LOCALTIMESTAMP, SESSIONTIMEZONE, SYSDATE, SYSTIMESTAMP, UID, USER, and USERENV)

Calls to user-defined functions

Dereferencing of REF columns (for example, using the DEREF function)

Nested table columns or attributes

The pseudocolumns CURRVAL, NEXTVAL, LEVEL, or ROWNUM

Date constants that are not fully specified