在Oracle数据库中是否存在布尔类型,类似于Ms SQL Server中的BIT数据类型?
BIT
存在用于pl/sql的布尔类型,但没有一个可以用作列的数据类型。
一个常见的节省空间的技巧是将布尔值存储为Oracle 字符,而不是NUMBER:
不仅在Oracle的SQL(不是PL/SQL)中缺少布尔数据类型,而且他们也没有关于使用什么来代替的明确建议。参见asktom上的这个线程。当有人指出'Y'/'N'依赖于英语时,他们会从推荐CHAR(1) 'Y'/'N'切换到NUMBER(1) 0/1,而例如,德国程序员可能会使用'J'/'N'。
'Y'/'N'
CHAR(1) 'Y'/'N'
NUMBER(1) 0/1
'J'/'N'
最糟糕的是,他们为这个愚蠢的决定辩护,就像他们为''=NULL愚蠢辩护一样。
''=NULL
不,不存在类型布尔,但你可以你1/0(类型数字),或'Y'/'N'(类型char),或'true'/'false'(类型varchar2)。
只是因为还没有人提到它:使用RAW(1)似乎也是常见的实践。
不。
可以使用:
IS_COOL NUMBER(1,0) 1 - true 0 - false
——享受甲骨文
或者使用char Y/N 如这里所述
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;
根据Ammoq和kupa的回答,我们使用默认为0的数字(1),不允许为空。
下面是一个添加一列来演示:
ALTER TABLE YourSchema.YourTable ADD (ColumnName NUMBER(1) DEFAULT 0 NOT NULL);
希望这能帮助到一些人。
不,在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' ));
如果你使用Java和Hibernate,那么使用NUMBER(1,0)是最好的方法。正如你在在这里中看到的,这个值会被Hibernate自动转换为布尔值。