布尔类型(boolean)在oracle存储过程中支持情况

1.布尔类型在oracle存储过程中支持情况

(1)布尔类型在过程、函数、包中的支持情况

Oracle存储过程定义布尔类型的关键字为boolean,不存在bool或者其他的关键字。

boolean类型的值有三种:true、false和null,true表示结果为真,false表示结果为假,其中null表示未知状态(unknown)。
存储过程中的过程、函数、包均支持boolean类型的变量、常量。

过程、函数支持boolean类型的参数、默认值,函数支持boolean类型的返回值。

下面用例编译执行均正确:

创建一个过程,过程中调用fun_test函数和pack_test包中的boolean:

create or replace procedure pro_test(v_int in boolean, v_out out boolean) is
v_bool_null boolean := null;
v_bool boolean := pack_test.p_bool_true;
begin
	v_out := v_int and v_bool and fun_test(v1 => v_bool);
end;

创建一个返回值和参数均为boolean的函数:

create or replace function fun_test(v_bool in boolean) return boolean is
  bool1 boolean;
begin
  if v_bool then
	bool1 := true;
  else
	bool1 := false;
  end if;
  return bool1;
end fun_test;

创建一个含有boolean类型的包:

create or replace package pack_test is
  p_bool_true constant  boolean := true;
  p_bool_false constant  boolean := false;
end;

(2)布尔类型与其他类型的兼容情况

boolean类型不支持与int、varchar类型之间的默认转换。将1、‘true’、‘1’赋值给boolean类型的变量时,均会报“表达式类型错误”。

算数运算符两端的操作数不支持boolean类型的变量或结果为布尔类型的表达式。

在这里插入图片描述

逻辑运算符两端支持boolean类型操作数或者结果为boolean类型的表达式。下面测试用例编译、执行均正确。

在这里插入图片描述

(3)布尔类型作为cast函数参数情况

通过测试和查阅资料发现,cast函数支持的参数类型如下:

二进制,同带binary前缀的效果 : BINARY    
字符型,可带参数 : CHAR()VARCHAR 
日期 : DATE     
时间: TIME     
日期时间型 : DATETIME     
浮点数 : DECIMAL      
整数 : SIGNED     
无符号整数 : UNSIGNED 

在oracle存储过程中,cast函数的参数不支持boolean类型、boolean值、以及值为boolean类型的表达式。
在这里插入图片描述

(4)存储过程case-when语句对布尔类型的支持情况

oracle存储过程中case-when语句支持boolean类型变量、常量、以及产生boolean值的表达式。
在这里插入图片描述

(5)存储过程SQL语句对布尔类型的支持情况

oracle存储过程SQL语句中where条件表达式支持可以产生布尔值的表达式,不支持布尔类型的变量,不支持布尔类型的常量。
在这里插入图片描述

(6)存储过程UDF对布尔类型的支持情况

定义udf时,如果定义中有SQL语句,SQL语句不支持布尔类型的变量和常量,其余部分的使用均与(1)的支持情况相同。
在这里插入图片描述

调用udf时,不支持返回类型为boolean的udf,如fun_udf1;不支持参数类型为boolean的udf,如fun_udf2;也不支持将fun_udf1作为fun_udf2的参数;但是支持用返回值和参数均不是boolean的udf调用fun_udf1和fun_udf2,如fun_udf3。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(7)存储过程UDAF对布尔类型的支持情况

定义udaf时,对象的属性类型不支持boolean类型,其余部分的使用均与(1)的支持情况相同。
在这里插入图片描述

参数类型为boolean,返回值类型为int的udaf在SQL中的使用,因为无法传入boolean类型的参数,所以不支持。如果将返回类型为boolean的udf作为参数类型为boolean的udaf,也不支持。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数类型为int,返回值类型为boolean的udaf,将其放到having语句后面测试,不支持。

在这里插入图片描述

在这里插入图片描述

2.调研总结

  • 1)Oracle存储过程中过程、函数、包均支持boolean类型,且boolean值为null、true、false。可以定义boolean类型的变量、常量。boolean类型可以作为参数、默认值、返回值。可以用boolean类型的变量、常量代替产生boolean值的表达式,如case-when语句中。
  • 2)Oracle存储过程不支持boolean类型与其他类型之间的默认转换,也不支持使用cast函数进行转换,因为cast函数的参数不支持boolean类型和boolean值。
  • 3)Oracle存储过程SQL中不支持boolean类型的变量、常量。如查询语句中where条件表达式后面,不能使用boolean变量或常量与表达式进行逻辑运算。
  • 4)定义udf时,如果有SQL语句,SQL不支持boolean,其余均符合存储过程对boolean的支持情况,如(1)。使用udf时,不支持直接调用返回类型或参数为boolean的udf,也不支持将返回类型为boolean的udf作为参数类型为boolean的udf的参数,但支持返回类型和参数都不是boolean的udf嵌套调用返回类型或参数为boolean的udf。
  • 5)定义udaf时,对象的属性类型不支持boolean类型,其余均符合存储过程对boolean的支持情况,如(1)。不支持参数或返回值为boolean类型的udaf。

猜你喜欢

转载自blog.csdn.net/qq_42570601/article/details/109224331