ORACLE CHECK CONSTRAINT使用示例(转载) .
看下面的例子:
CREATE TABLE temp (age NUMBER(3));
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE <= 125));
现在我们能够插入Age表的集合是{1,2,…,125}或null,这和我们实际的现实生活是符合的。
为限制Age字段取值范围不能为空,增加not null约束。
CREATE TABLE temp (age NUMBER(3) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_age CHECK
((AGE>0) AND (AGE<=125));
下面的操作就会获得一个oracle错误:
SQL> insert into temp values (130);
insert into temp values (130)
*
ORA-02290: check constraint (SCOTT.CK_TEMP_AGE) violated.
当Oracle 执行插入操作时,会检查Check约束条件表达式结果是否为TRUE,不为TRUE则拒绝执行。
Check约束可以使用组合条件:
CREATE TABLE temp (a NUMBER);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a CHECK
(((a>=0) AND (a<=10)) OR (a=999) OR (a=9999));
Oracle中没有Boolean类型,PL/SQL有Boolean类型.为了替代一个boolean列使用check约束
CREATE TABLE temp(enabled NUMBER(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN (0, 1));
也可以使用varchar2类型
CREATE TABLE temp(enabled VARCHAR2(1) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_enabled CHECK
(enabled IN ('T', 'F', 't', 'f'));
CREATE TABLE temp(status VARCHAR2(16) NOT NULL);
ALTER TABLE temp ADD CONSTRAINT ck_temp_status CHECK
(status IN
('RECEIVED','APPROVED','WAITING APPROVAL'));
一、多字段约束
Check约束可以是一个多字段的组合,如下:
CREATE TABLE box
(length NUMBER(2) NOT NULL,
width NUMBER(2) NOT NULL,
height NUMBER(2) NOT NULL);
ALTER TABLE box ADD CONSTRAINT ck_box_volume CHECK
((length*width*height<100) AND
(length > 0) AND (length <= 10) AND
(width > 0) AND (width <= 10) AND
(height > 0) AND (height <= 10));
也可以以不同的名字定义多个Check约束
ALTER TABLE box ADD CONSTRAINT ck_box_length CHECK
((length > 0) AND (length <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_width CHECK
((width > 0) AND (width <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_height CHECK
((height > 0) AND (height <= 10));
ALTER TABLE box ADD CONSTRAINT ck_box_dimension CHECK
((length*width*height<100));
二、补充Unique约束
Check约束可以被用于多行非空约束,即同时为空或同时不为空。Unique约束的两个字段可能有一个为null,而另一个不为null,如果我们不想它出现这种情况,我们就可以用Check约束:
(both columns are NULL) OR (both columns are NOT NULL)
CREATE TABLE temp (pk NUMBER PRIMARY KEY, a NUMBER, b NUMBER);
ALTER TABLE temp
ADD CONSTRAINT uk_temp_a_b UNIQUE (a, b);
ALTER TABLE temp ADD CONSTRAINT ck_temp_a_b
CHECK ((a IS NULL AND b IS NULL) OR
(a IS NOT NULL AND b is NOT NULL));
ORACLE CHECK CONSTRAINT使用示例(转载) .的更多相关文章
- ORACLE中CONSTRAINT的四对属性
ORACLE中CONSTRAINT的四对属性 summary:在data migrate时,某些表的约束总是困扰着我们,让我们的migratet举步维艰,怎样利用约束本身的属性来处理这些问题呢?本文具 ...
- Nginx 简单的负载均衡配置示例(转载)
原文地址:Nginx 简单的负载均衡配置示例(转载) 作者:水中游于 www.s135.com 和 blog.s135.com 域名均指向 Nginx 所在的服务器IP. 用户访问http://www ...
- Oracle中创建触发器示例及注意事项
1.oracle 中创建触发器示例 CREATE TABLE "CONCEPT"."FREQUENCYMODIFYLOG" ( "FREQUENCYI ...
- Oracle约束(Constraint)详解
概述 约束是数据库用来确保数据满足业务规则的手段,不过在真正的企业开发中,除了主键约束这类具有强需求的约束,像外键约束,检查约束更多时候仅仅出现在数据库设计阶段,真实环境却很少应用,更多是放到程序逻辑 ...
- oracle:10g下载地址(转载)
转载地址:http://www.veryhuo.com/a/view/177074.html Oracle 10g Database和Client多平台官方下载地址 http://www.veryhu ...
- oracle常用函数及示例
学习oracle也有一段时间了,发现oracle中的函数好多,对于做后台的程序猿来说,大把大把的时间还要学习很多其他的新东西,再把这些函数也都记住是不太现实的,所以总结了一下oracle中的一些常用函 ...
- Java JDBC Thin Driver 连接 Oracle 三种方法说明(转载)
一.JDBC 连接Oracle 说明 JDBC 的应用连接Oracle 遇到问题,错误如下: ORA-12505,TNS:listener does not currently know of SID ...
- Oracle Merge备忘示例
Oracle的merge语法非常实用,用于Insert.Update判断情况.以下是自己书写的一个示例,以免时间长了语法形式忘记了. MERGE INTO T_FR_GUOSZX T USING (S ...
- Oracle Flashback和RMAN示例
作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5346833.html 环境: Windows 10 专业版 Oracle Database 12c R ...
随机推荐
- 利用glibc中锁结构的信息解决死锁问题
首先非常感谢老丁和老李同学的帮助,没有他们这个问题估计又得搞很久.遇见这个问题,真是头疼.不熟悉代码.不熟悉流程,但是领导还是把活给排下来了(实在不解),只能硬着头皮找了. 问题是这样的,cac ...
- pyspider安装后,点击run,报pyhton has stop working或python已停止运行的错误
问题解决虽然只有几句话,但是背后花了一天时间,各种FQ搜索. pyspider目测只支持32位的系统,所以你下载32位的python安装就行了,然后安装pyspider运行就没有问题了,坑爹啊---- ...
- STL中vector,Map,Set的实现原理
vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元 ...
- The number of divisors(约数) about Humble Numbers
The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Lim ...
- BZOJ NOI十连测 第二测 T2
思路:20%可以搜索.. #include<algorithm> #include<cstdio> #include<cmath> #include<cstr ...
- Keil C51汉字显示的bug问题(0xFD问题)
一.缘起 这两天改进MCU的液晶显示方法,采用“即编即显”的思路,编写了一个可以直接显示字符串的程序.如程序调用disstr("我是你老爸");液晶屏上就会显示“我是你老爸”. 二 ...
- C# System.Object基类
System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Objec ...
- 007.androidUI开发进阶(基础--案例) .
1.Dialog有四种,分别是AlertDialog,ProgressDialog,DatePickerDialog,TimePickerDialog 1.1AlertDialog public cl ...
- perl return和break
zjzc01:/root/test# cat a3.pl sub mask { my $n=shift; my $j =100; for ($i = 1;$i <= 5;$i++){ print ...
- JVM命令行选项及GC日志
转:http://blog.csdn.net/q291611265/article/details/48028189 一.设置参数 在使用eclipse编译器的时候,可以采用以下的运行方式来设置虚拟机 ...