首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Check Integrity约束

Oracle Check Integrity约束
EN

Stack Overflow用户
提问于 2013-02-03 11:16:25
回答 2查看 1K关注 0票数 1

我正在尝试在Oracle中创建一个由几个完整性约束控制的表。该表由一个假设的学生数据库组成。该数据库的规则之一是,要将学生归类为大三学生,他们必须完成55至84学分(含)。

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

到目前为止我已经..。

代码语言:javascript
复制
CONSTRAINT IC4 CHECK (hours >=55 AND hours <= 84), 

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

我的桌子是..。

代码语言:javascript
复制
    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); 

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

代码语言:javascript
复制
INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

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

我该如何写一个约束来强制执行这些规则呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-03 12:48:26

您需要再次使用神奇的单词and

代码语言:javascript
复制
CREATE TABLE students (
....
 , CONSTRAINT IC4 CHECK ( classification = 'junior' AND hours >=55 AND hours <= 84 ) 

我怀疑你也会想要有其他的分类,并验证它们的范围。使用圆括号和OR来完成此操作。(为清楚起见,请使用BETWEEN来定义范围)....

代码语言:javascript
复制
, 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' )
                       )                                 

确保你有一套完整的范围。

票数 4
EN

Stack Overflow用户

发布于 2013-02-03 15:17:02

一旦您创建了表:

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

代码语言:javascript
复制
ALTER TABLE Students
ADD CONSTRAINT IC4 (classification='junior' AND hours >=55 AND hours <= 84 );

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

代码语言:javascript
复制
INSERT INTO Students VALUES (50, 'Kim', 'junior', 34, 3.5, 40);  

不允许插入上述语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14669174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档