首页 > 解决方案 > 在 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 仍将输入到表中而没有错误。

标签: sqloracle

解决方案


这个怎么样?

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。


推荐阅读