Oracle的数据类型中不包括Boolean,一般用 Number(1) 和 Char(1)来实现。
所 以”You cannot insert the values TRUE and FALSE into a database column. Also, you cannot select or fetch column values into a BOOLEAN variable.“
plsql为了实现PLSQL的结构化编程,支持了boolean类 型,所以可能会出现的问题是一个存储过程或者函数的调用内部的表达式的返回参数是boolean型的,但在使用procedure的时候,无法传递boolean参数,执行时会抛出”参数类型不对“的exception,解决的方案就是把boolean的参数用别的类型代替。
只是不太明白oracle为什么不支持 boolean类型。
一直被Oracle中没有boolean类型困扰,有两种解决方案,Number(1) 和 Char(1),两个各有所长,个人多用 Number方式解决,原因很简单,因为是来自C语言习惯。其实比较好的方式是用 Char(1)实现boolean,但也有需要注意的地方: 如果是特定boolean类型情况下,Char(1)是比Number(1)更好的选择,因为前者所用的存储空间会比后者少,但这二者在查询时存储空间的 节省会提供查效率,但是要注意的是用Char(1)的时候不能让这个字段可以为空,必须有缺省,否则查询效率会降低。
三、PL/SQL 中有boolean类型,有null类型
PL/SQL中是有Boolean类型的,只能取2个值:true和false;
存储过程中的变量也支持boolean型;
但数据库中没有boolean类型。
- -- Created on 2022-09-15 by ADMINISTRATOR
- Declare
- -- Local variables here
- b_res Boolean;
- Begin
- -- Test statements here
- b_res := 99 > 100;
- If b_res Then
- dbms_output.put_line('true');
- else
- dbms_output.put_line('false');
- End If;
- End;
--打印:false
----------------------------------------
- declare
- b_res boolean;
- begin
- b_res := 99 > 100;
- dbms_output.put_line(b_res);
- end;
--会报错。运行时得到错误信息:调用'PUT_LINE' 时参数个数或类型错误。这是因为在脚本中不能直接打印-----boolean类型的值。
真实的应用场景是在PLSQL中,Boolean类型是可以参与代码的流程控制,比如If Elsif等,但是不能作为存储过程,方法的入参和出参。