• 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等,但是不能作为存储过程,方法的入参和出参。 

  • 相关阅读:
    pta——建立学生信息链表,逆序数据建立链表,删除单链表偶数节点,链表拼接,统计专业人数,链表逆置
    【Java】IO流体常用类FileReader和FileWriter
    notepad++中文出现异体汉字,怎么改正
    Go 复合类型之切片类型介绍
    @ELK集群环境部署搭建
    什么是代码签名证书?
    【Web】log4j打JNDI专题刷题记录
    stm32f407探索者开发板(一)——资源介绍(顺便说下无人机的进度状况)
    starrocks
    使用Cpolar和Tipas在Ubuntu上搭建私人问答网站,构建专业问答系统
  • 原文地址:https://blog.csdn.net/wangshengfeng1986211/article/details/126873471