布尔类型是PL/SQL数据类型的一种,能存储逻辑值TRUE、FALSE。只有逻辑操作符才允许应用在布尔变量上。数据库 SQL 类型并不支持布尔
类型,只有PL/SQL才支持。所以不能往数据库中插入或从数据库中检索出布尔类型的值。下面描述了布尔型的声明、赋值以及如何输出布尔型。
1、布尔型的声明与赋值
PL/SQL提供的两个表示布尔值的直接量为TRUE和FALSE。这些值不是字符串,我们也不用加引号。
可以直接用布尔直接量给布尔类型变量赋值。
--声明与赋值示例
DECLARE
is_boolean BOOLEAN; -- 声明一个布尔类型变量
BEGIN
is_boolean := FALSE; -- 给这个变量赋值
END;
--缺省情况下,布尔型的默认值为false
DECLARE
v_boolean BOOLEAN;
BEGIN
IF v_boolean THEN
DBMS_OUTPUT.put_line( 'true' );
ELSE
DBMS_OUTPUT.put_line( 'false' );
END IF;
END;
false
PL/SQL procedure successfully completed.
只有TRUE、FALSE 和NULL 才可以赋给布尔类型的变量。
当表达式中使用关系操作符的时候,返回结果也是布尔类型的值,如下面的示例:
v_flag := (count > 200);
2、如何输出布尔型
--下面的例子是一个使用put_line函数输出的情形
SQL> DECLARE
2 v_bool BOOLEAN;
3 BEGIN
4 v_bool := TRUE;
5 DBMS_OUTPUT.put_line( 'The value if v_bool is ' || v_bool );
6 END;
7 /
DBMS_OUTPUT.put_line( 'The value if v_bool is ' || v_bool );
*
ERROR at line 5:
ORA-06550: line 5, column 26:
PLS-00306: wrong number or types of arguments in call to '||'
ORA-06550: line 5, column 4:
PL/SQL: Statement ignored
--上面在输出布尔型的时候收到了错误提示PLS-00306
--在这个地方需要注意的是使用PUT_LINE函数,由于dbms_output函数的参数本身并不支持boolean型,因此给出了错误提示
--下面是PUT_LINE函数参数的描述
SQL> desc dbms_output
PROCEDURE PUT_LINE
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
A VARCHAR2 IN
可以通过调用dbms_sqltcb_internal包中i_convert_from_boolean函数来实现,调用时应具有相应的权限。
SQL> DECLARE
2 v_bool BOOLEAN;
3 BEGIN
4 v_bool := TRUE;
5 DBMS_OUTPUT.put_line( 'Firstly, v_bool is ' || sys.dbms_sqltcb_internal.i_convert_from_boolean(v_bool));
6 v_bool := FALSE;
7 DBMS_OUTPUT.put_line( 'Next , v_bool is ' || sys.dbms_sqltcb_internal.i_convert_from_boolean(v_bool));
8 END;
9 /
Firstly, v_bool is TRUE
Next , v_bool is FALSE
PL/SQL procedure successfully completed.
也通过函数来返回布尔型
FUNCTION bool2char(bool IN boolean) RETURN varchar2 IS
BEGIN
IF bool THEN RETURN 'TRUE';
ELSIF NOT bool THEN RETURN 'FALSE';
ELSE RETURN 'NULL'; END IF;
END;
SQL> DECLARE
2 v_bool BOOLEAN;
3
4 FUNCTION bool2char( bool IN BOOLEAN )
5 RETURN VARCHAR2 IS
6 BEGIN
7 IF bool THEN
8 RETURN 'TRUE';
9 ELSIF NOT bool THEN
10 RETURN 'FALSE';
11 ELSE
12 RETURN 'NULL';
13 END IF;
14 END;
15 BEGIN
16 v_bool := TRUE;
17 DBMS_OUTPUT.put_line( 'Firstly, v_bool is ' || bool2char( v_bool ) );
18 v_bool := FALSE;
19 DBMS_OUTPUT.put_line( 'Next, v_bool is ' || bool2char( v_bool ) );
20 v_bool := NULL;
21 DBMS_OUTPUT.put_line( 'Finally, v_bool is ' || bool2char( v_bool ) );
22 END;
23 /
Firstly, v_bool is TRUE
Next, v_bool is FALSE
Finally, v_bool is NULL
PL/SQL procedure successfully completed. -->Author : Robinson Cheng Blog :http://blog.csdn.net/robinson_0612
更多参考
批量SQL之 FORALL 语句
批量SQL之 BULK COLLECT 子句
PL/SQL 集合的初始化与赋值
PL/SQL 联合数组与嵌套表
PL/SQL 变长数组
PL/SQL --> PL/SQL记录
SQL tuning 步骤
高效SQL语句必杀技
父游标、子游标及共享游标
绑定变量及其优缺点
dbms_xplan之display_cursor函数的使用
dbms_xplan之display函数的使用
执行计划中各字段各模块描述
使用 EXPLAIN PLAN 获取SQL语句执行计划