Oracle数据库中是否有任何布尔类型?

时间:2010-09-16 12:43:09

标签: sql database oracle boolean sqldatatypes

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

10 个答案:

答案 0 :(得分:235)

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

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

答案 1 :(得分:45)

不。

可以使用:

IS_COOL NUMBER(1,0)

1 - true
0 - false

---享受Oracle

或使用char Y / N as described here

答案 2 :(得分:14)

不在SQL级别,这很可惜 PLSQL中有一个

答案 3 :(得分:9)

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

答案 4 :(得分:8)

不存在类型布尔值,但是你可以使用1/0(类型号),或者'Y'/'N'(类型为char),或者'true'/'false'(类型) VARCHAR2)。

答案 5 :(得分:5)

有一个boolean type for use in pl/sql,但没有一个可以用作列的数据类型。

答案 6 :(得分:4)

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

答案 7 :(得分:3)

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

答案 8 :(得分:1)

如果您将Java与Hibernate一起使用,则最好使用NUMBER(0,1)。如您在here中所见,Hibernate将该值自动转换为布尔值。

答案 9 :(得分:-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;