303

Oracle 数据库中是否有任何布尔类型,类似于BITMs SQL Server 中的数据类型?

4

11 回答 11

332

Oracle 的 SQL(不是 PL/SQL)中不仅缺少布尔数据类型,而且他们也没有明确的建议来代替使用什么。请参阅asktom 上的此线程。从推荐CHAR(1) 'Y'/'N'他们切换到NUMBER(1) 0/1当有人指出这'Y'/'N'取决于英语时,而例如德国程序员可能会使用'J'/'N'

最糟糕的是,他们为这个愚蠢的决定辩护,就像他们为''=NULL愚蠢辩护一样。

于 2010-09-16T12:54:37.990 回答
71

没有。

可以使用:

IS_COOL NUMBER(1,0)

1 - true
0 - false

--- 享受甲骨文

或使用此处描述的char Y/N

于 2014-06-24T21:17:17.007 回答
46

根据 Ammoq 和 kupa 的回答,我们使用默认值为 0 的 number(1) 并且不允许空值。

这是一个添加列来演示:

ALTER TABLE YourSchema.YourTable ADD (ColumnName NUMBER(1) DEFAULT 0 NOT NULL);

希望这可以帮助某人。

于 2015-09-10T07:19:05.443 回答
18

不,Oracle 数据库中没有布尔类型,但您可以这样做:

您可以在列上放置检查约束。

如果您的表没有检查列,您可以添加它:

ALTER TABLE table_name
ADD column_name_check char(1) DEFAULT '1';

添加寄存器时,默认情况下此列为 1。

在这里你放了一个限制列值的检查,只放 1 或 0

ALTER TABLE table_name ADD
CONSTRAINT name_constraint 
column_name_check (ONOFF in ( '1', '0' ));
于 2017-06-16T12:27:56.140 回答
15

不在 SQL 级别,很遗憾虽然 PLSQL 中有一个

于 2010-09-16T12:45:07.163 回答
9

不,不存在 boolean 类型,但您可以使用 1/0(类型编号)或 'Y'/'N'(类型 char)或 'true'/'false'(类型 varchar2)取而代之。

于 2010-09-16T13:06:23.900 回答
5

在 pl/sql 中有一个布尔类型可以使用,但没有一个可以用作列的数据类型。

于 2010-09-16T12:46:41.443 回答
4

如果您将 Java 与 Hibernate 一起使用,那么使用 NUMBER(1,0) 是最好的方法。正如你在这里看到的,这个值被 Hibernate 自动转换为布尔值。

于 2020-07-23T07:21:59.503 回答
3

只是因为还没有人提到它:使用 RAW(1) 似乎也很常见。

于 2010-09-16T13:33:04.833 回答
3

一个常见的节省空间的技巧是将布尔值存储为 Oracle CHAR,而不是 NUMBER:

于 2010-09-16T12:48:30.133 回答
-1
DECLARE
error_flag  BOOLEAN := false;
BEGIN

error_flag := true;
--error_flag := 13;--expression is of wrong type

  IF error_flag THEN 

UPDATE table_a SET id= 8 WHERE id = 1;

END IF;
END;
于 2015-08-07T05:22:55.803 回答