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

it2026-02-11  11

文章目录

1.布尔类型在oracle存储过程中支持情况(1)布尔类型在过程、函数、包中的支持情况(2)布尔类型与其他类型的兼容情况(3)布尔类型作为cast函数参数情况(4)存储过程case-when语句对布尔类型的支持情况(5)存储过程SQL语句对布尔类型的支持情况(6)存储过程UDF对布尔类型的支持情况(7)存储过程UDAF对布尔类型的支持情况 2.调研总结

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。
最新回复(0)