在下面的代码中,如何定义可以阻止值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)
)
答案 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需要减少更长的被禁止值列表的输入: