• Oracleの怪异的的Boolean类型


    一、oracle本身没有Boolean类型

    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类型。

    1. -- Created on 2022-09-15 by ADMINISTRATOR
    2. Declare
    3. -- Local variables here
    4. b_res Boolean;
    5. Begin
    6. -- Test statements here
    7. b_res :=  99 > 100;
    8. If b_res Then
    9. dbms_output.put_line('true');
    10. else 
    11. dbms_output.put_line('false');
    12. End If;
    13. End;

    --打印:false
    ----------------------------------------

    1. declare 
    2. b_res boolean;
    3. begin 
    4. b_res := 99 > 100;
    5. dbms_output.put_line(b_res);
    6. end;

    --会报错。运行时得到错误信息:调用'PUT_LINE' 时参数个数或类型错误。这是因为在脚本中不能直接打印-----boolean类型的值。

     真实的应用场景是在PLSQL中,Boolean类型是可以参与代码的流程控制,比如If Elsif等,但是不能作为存储过程,方法的入参和出参。 

  • 相关阅读:
    Springboot微服务之redis注册中心
    计组 | 【七 输入/输出系统】强化阶段应用题
    CISP-PTE学习总结之基础练习题(三)
    SpringData jpa 详解
    单片机编程原则
    【mcuclub】独立按键
    大力说企微第一课:企业微信的注册验证和认证
    zigbee cc2530的室内/矿井等定位系统RSSI原理
    Py2neo:一种快速导入百万数据到Neo4j的方式
    UNPV2 学习:Posix Message Queues Exercise 解答记录
  • 原文地址:https://blog.csdn.net/wangshengfeng1986211/article/details/126873471