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) 的时候不能让这个字段可以为空,必须有缺省,否则查询效率会降低

你可能感兴趣的:(数据库DataBase,Oracle)