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;boolean类型不支持与int、varchar类型之间的默认转换。将1、‘true’、‘1’赋值给boolean类型的变量时,均会报“表达式类型错误”。
算数运算符两端的操作数不支持boolean类型的变量或结果为布尔类型的表达式。
逻辑运算符两端支持boolean类型操作数或者结果为boolean类型的表达式。下面测试用例编译、执行均正确。
通过测试和查阅资料发现,cast函数支持的参数类型如下:
二进制,同带binary前缀的效果 : BINARY 字符型,可带参数 : CHAR() 、VARCHAR 日期 : DATE 时间: TIME 日期时间型 : DATETIME 浮点数 : DECIMAL 整数 : SIGNED 无符号整数 : UNSIGNED在oracle存储过程中,cast函数的参数不支持boolean类型、boolean值、以及值为boolean类型的表达式。
oracle存储过程中case-when语句支持boolean类型变量、常量、以及产生boolean值的表达式。
oracle存储过程SQL语句中where条件表达式支持可以产生布尔值的表达式,不支持布尔类型的变量,不支持布尔类型的常量。
定义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。
定义udaf时,对象的属性类型不支持boolean类型,其余部分的使用均与(1)的支持情况相同。
参数类型为boolean,返回值类型为int的udaf在SQL中的使用,因为无法传入boolean类型的参数,所以不支持。如果将返回类型为boolean的udf作为参数类型为boolean的udaf,也不支持。
参数类型为int,返回值类型为boolean的udaf,将其放到having语句后面测试,不支持。
