sql - 在 sql 中仅限制 '1' 和 '0' 值
问题描述
我目前在 Oracle SQL 中工作,我试图将整数数据类型限制为仅取值 0 和 1(对于活动项或非活动项)。
这是我目前拥有的:
CREATE TABLE ACTIVE_EX (
ACTIVE int NOT NULL
CONSTRAINT check_active_ind CHECK (ACTIVE = 0 OR ACTIVE = 1)
);
SELECT * FROM ACTIVE_EX;
INSERT INTO ACTIVE_EX(ACTIVE)values(2);
当我输入此命令并运行该Select * from ACTIVE_EX
行时,值 2 仍将输入到表中而没有错误。
解决方案
这个怎么样?
SQL> create table test
2 (active int not null
3 constraint ch_active check (active in (0, 1))
4 );
Table created.
SQL>
SQL> insert into test values (-1);
insert into test values (-1)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACTIVE) violated
SQL> insert into test values (2);
insert into test values (2)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACTIVE) violated
SQL> insert into test values (100);
insert into test values (100)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACTIVE) violated
SQL> insert into test values (0.3);
1 row created.
SQL> insert into test values (1.2);
1 row created.
SQL> insert into test values (3.8);
insert into test values (3.8)
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CH_ACTIVE) violated
SQL> select * From test;
ACTIVE
----------
0
1
SQL>
如您所见,可以输入 0 和 1 之间的十进制值,但会进行四舍五入,因此最终结果仍为 0 或 1。
推荐阅读
- r - 循环一个函数,该函数返回由另一个变量分组的数据框中的变量列表
- android - 具有动态值的嵌套 for 循环以显示在 Android Studio 中 RecyclerView 上的微调器中
- c# - 如何在 .net 中将日志写入 cloudwatch
- c - 如何将程序发送到后台并停止执行?
- sql - 拆分列值并移动到行
- c# - 如何将 Windows 上的 Redis 连接到远程服务器
- visual-studio-2017 - 在 Visual Studio 2017 中使用 FolderProfile 发布时挂钩“发布后”事件
- django - 在时区支持处于活动状态时收到一个天真的日期时间
- c# - 如何保证线程的执行顺序
- java - 使我的应用程序能够自行获取辅助功能权限