Oracle数据库中有boolean类型吗?

问题描述 投票:0回答:11

Oracle数据库中有没有类似于Ms SQL Server中的

BIT
数据类型的布尔类型?

sql database oracle boolean sqldatatypes
11个回答
353
投票

在版本 23c (2023) 之前,不仅 Oracle 的 SQL(不是 PL/SQL)中缺少 boolean 数据类型,而且他们也没有明确建议使用什么来代替。请参阅 this thread on asktom。当有人指出

CHAR(1) 'Y'/'N'
取决于英语时,他们从推荐
NUMBER(1) 0/1
切换到
'Y'/'N'
,而例如德国程序员可能会使用
'J'/'N'
代替。

最糟糕的是,他们为这个愚蠢的决定辩护,就像他们为

''=NULL
愚蠢辩护一样。


Oracle 23c 最终在所有上下文中支持布尔数据类型,以及与其他数据库相比它所缺乏的其他几个特性。

SQL> select true;

TRUE
-----------
TRUE

SQL> create table test1(a boolean);

Table created.

SQL> insert into test1 values (true),(false),(to_boolean(0)),(to_boolean('y'));

4 rows created.

但是空字符串问题永远不会改变。


79
投票

不。

可以使用:

IS_COOL NUMBER(1,0)

1 - true
0 - false

---享受甲骨文

或使用 char Y/N as described here


50
投票

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

这里有一个添加专栏来演示:

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

希望这对某人有帮助。


20
投票

不,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' ));

15
投票

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


9
投票

不存在不存在的布尔类型,但是您可以使用 1/0(类型数字)或“Y”/“N”(类型 char)或“true”/“false”(类型 varchar2)来代替它.


6
投票

如果您将 Java 与 Hibernate 一起使用,那么使用 NUMBER(1,0) 是最好的方法。正如您在 here 中所见,Hibernate 会自动将此值转换为布尔值。


5
投票

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


3
投票

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


3
投票

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


-3
投票
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;
© www.soinside.com 2019 - 2024. All rights reserved.