Oracle-实现Boolean类型字段

Posted MinggeQingchun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle-实现Boolean类型字段相关的知识,希望对你有一定的参考价值。

Oracle中实际上没有Boolean布尔数据类型

因为Boolean类型不属于SQL86 SQL92规范,事实上也不属于任何一个数据库规范,所以就没有设置到SQL引擎中。事实上C语言我记得也是没有boolean原生类型的。实现上可以通过0/1或者Y/N来实现

然而PL/SQL支持这种类型了。说明Oracle数据库是支持布尔变量的,然而Oracle SQL引擎不支持。所以,如果返回值为布尔类型的函数是不能直接用在SQL语句上的。

但是网上也提供了两种解决方案

1、用Number(1)

2、用Char(1)

至于到底选用哪种方案呢,在网上有看到经验丰富的Oracle开发人员突出每种方法的一些优点/缺点的段落

The most commonly seen design is to imitate the many Boolean-like
flags that Oracle’s data dictionary views use,selecting ‘Y’ for true
and ‘N’ for false. However,to interact correctly with host
environments,such as JDBC,OCCI,and other programming environments,
it’s better to select 0 for false and 1 for true so it can work
correctly with the getBoolean and setBoolean functions.

为了效率,他们提供的解决方案是用 Char(1) 实现boolean

1、值为0/1(因为与JDBC的getBoolean()等具有互操作性)与检查约束
2、CHAR类型(因为它使用比NUMBER少的空间)

 如果是特定boolean类型情况下,Char(1)是比 Number(1) 更好的选择,因为前者所用的存储空间会比后者少

但也有需要注意的地方,用 Char(1) 的时候不能让这个字段可以为空,必须有缺省,否则查询效率会降低

以上是关于Oracle-实现Boolean类型字段的主要内容,如果未能解决你的问题,请参考以下文章

如何将oracle表中的字段由integer 转变为varchar2(50)

mysql怎么获取数据表字段enum类型的默认值

Oracle Database 23c 开发者新特性概览

oracle中如何修改日期类型的字段值

Oracle中实现布尔类型

TypeScript 类使用联合类型字段实现接口导致错误 (2322)