关于sql:Oracle数据库中是否有任何布尔类型?

Is there any boolean type in Oracle databases?

Oracle数据库中是否有类似于MS SQL Server中的BIT数据类型的布尔类型?


不仅Oracle的SQL中缺少布尔数据类型(而不是pl/sql),而且他们也没有明确的推荐使用什么。请看asktom上的这条线。当有人指出'Y'/'N'依赖于英语时,他们不再推荐CHAR(1) 'Y'/'N',转而推荐NUMBER(1) 0/1,而德国程序员可能使用'J'/'N'

最糟糕的是,他们捍卫这个愚蠢的决定,就像捍卫江户的愚蠢一样。


不。

可以使用:

1
2
3
4
IS_COOL NUMBER(1,0)

1 - TRUE
0 - FALSE

——享受甲骨文

或者使用这里描述的字符y/n


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

下面是一个要演示的添加列:

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

希望这能帮助别人。


不是在SQL级别,这是一个遗憾但是PLSQL中有一个


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

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

如果您的表没有复选列,可以添加它:

1
2
ALTER TABLE TABLE_NAME
ADD column_name_check CHAR(1) DEFAULT '1';

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

在这里,您只需输入1或0,就可以设置限制列值的检查。

1
2
3
ALTER TABLE TABLE_NAME ADD
CONSTRAINT name_constraint
column_name_check (ONOFF IN ( '1', '0' ));

不,不存在Boolean类型,但您可以使用1/0(类型编号)、或"y''n'(类型char)或"true''false'(类型varchar2)来代替它。


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


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


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


1
2
3
4
5
6
7
8
9
10
11
12
13
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;