如何在oracle中定义检查约束

时间:2017-01-23 06:47:57

标签: oracle constraints

在下面的代码中,如何定义可以阻止值10,20,30插入

的检查约束
create table testtable(
  testtableid integer primary key, 
  testtableno integer unique,
  testtablename varchar2(255),
  testtablevalue number check(testtablevalue <>10 
                            or testtablevalue <>20
                            or  testtablevalue<>30),
  testtable date DEFAULT sysdate, 
  empid number FOREIGN key  references empmaster(empid)
)

2 个答案:

答案 0 :(得分:3)

INTEGER是Oracle支持的ANSI数据类型之一,并注明其等效项为NUMBER(p,0)。使用INTEGER具有语义价值,因为审阅者会知道它不仅仅是一个设定精度的数量,而是必须是一个整数。

(检查此答案以更好地理解Oracle中INTEGER和NUMBER之间的区别:https://stackoverflow.com/a/23916374/2611451

您需要CONSTRAINT关键字,并且可以使用NOT IN来定义检查约束:

create table testtable(
   testtableid Number primary key, 
   testtableno Number unique,
   testtablename varchar2(255),
   testtablevalue Number,
   ...
   CONSTRAINT tblValue_chk check(testtablevalue NOT IN (10, 20, 30))
   ....
)

修改

支票也可以内联应用:

create table testtable(
    testtableid Number primary key, 
    testtableno Number unique,
    testtablename varchar2(255),
    testtablevalue Number check(testtablevalue NOT IN (10, 20, 30))
)

答案 1 :(得分:3)

  

&#34;阻止值10,20,30&#34;

您希望阻止所有这些值,因此您需要使用布尔AND。

testtablevalue number check(testtablevalue <> 10 
                            AND testtablevalue <> 20 
                            AND  testtablevalue<>30),

使用NOT IN需要减少更长的被禁止值列表的输入: