Oracle Check Integrity约束

时间:2013-02-03 03:16:25

标签: oracle constraints

我正在尝试在Oracle中创建一个由几个完整性约束控制的表。该表由假设的学生数据库组成。数据库的一个规则是,对于被分类为初级学生的学生,他们必须完成55至84学分(包括)。

我需要创建一个完整性约束来强制执行此规则,但我不完全确定如何去做。我觉得CHECK约束在这种情况下会很有用。

到目前为止,我有......

CONSTRAINT IC4 CHECK (hours >=55 AND hours <= 84), 

此代码有效,但不确定学生记录是否为初级。

我的桌子设置是......

    CREATE TABLE  Students ( id                INTEGER, 
                             name              CHAR(10)    NOT NULL,  
                             classification    CHAR(10)    NOT NULL, 
                             hours             INTEGER, 
                             gpa               NUMBER(3,2) NOT NULL, 
                             mentor            INTEGER); 

所以如果我们试图插入......

INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

...将违反完整性约束,因为记录试图存储为“初级”,但学生只完成了34个小时。

我如何编写强制执行这些规则的约束?

2 个答案:

答案 0 :(得分:4)

您需要再次使用魔术词and

CREATE TABLE students (
....
 , CONSTRAINT IC4 CHECK ( classification = 'junior' AND hours >=55 AND hours <= 84 ) 

我怀疑你也想要其他分类,并验证他们的范围。使用括号和OR来执行此操作。 (并使用BETWEEN定义范围以便清晰)....

, CONSTRAINT IC4 CHECK ( ( classification = 'junior' AND hours BETWEEN 55 AND 84 ) 
                       OR ( classification = 'sophomore' AND hours BETWEEN 85 AND 124 )  
                       OR ( classification = 'senior' AND hours > 124 )  
                       OR ( classification = 'fresher' )
                       )                                 

确保您拥有一整套范围。

答案 1 :(得分:1)

创建表格后:

然后使用下面给出的alter语句添加检查约束:

ALTER TABLE Students
ADD CONSTRAINT IC4 (classification='junior' AND hours >=55 AND hours <= 84 );

现在,当您尝试插入以下语句时:

INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

不允许插入上述声明。