PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL
来源:互联网 发布:手机上视频录像软件 编辑:程序博客网 时间:2024/05/18 17:02
Oracle的PL/SQL中的BOOLEAN类型有三个取值,分别是TRUE、FALSE以及NULL。这三个值会给开发的时候造成不必要的麻烦,例如
DECLARE B_FLAG_TRUE BOOLEAN := TRUE; B_FLAG_FALSE BOOLEAN := FALSE; B_FLAG_NULL BOOLEAN :=NULL;BEGIN IF (B_FLAG_NULL AND B_FLAG_TRUE) THEN DBMS_OUTPUT.PUT_LINE('NULL AND TRUE'); END IF; IF NOT (B_FLAG_NULL AND B_FLAG_TRUE) THEN DBMS_OUTPUT.PUT_LINE('NOT (NULL AND TRUE)'); END IF;END;
上面的两个判断,均没有输出字符,因此,我们需要看一下问题出在什么地方:
DECLARE B_FLAG_TRUE BOOLEAN := TRUE; B_FLAG_FALSE BOOLEAN := FALSE; B_FLAG_NULL BOOLEAN :=NULL; B_FLAG_RESULT BOOLEAN; FUNCTION TSBOOLEAN (B_FLAG BOOLEAN)RETURN VARCHAR2 IS BEGIN RETURN CASE B_FLAG WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' ELSE 'NULL' END; END TSBOOLEAN;BEGIN B_FLAG_RESULT :=(B_FLAG_NULL AND B_FLAG_TRUE) ; DBMS_OUTPUT.PUT_LINE(TSBOOLEAN(B_FLAG_RESULT)); IF B_FLAG_RESULT THEN DBMS_OUTPUT.PUT_LINE(''||'==>'||''); END IF; IF NOT B_FLAG_RESULT THEN DBMS_OUTPUT.PUT_LINE(''||'==>'||''); END IF;END;
原来,上面的输出结果是NULL,所以有一个规范:“我们必须要预料到布尔表达式的结果会存在NULL值,因此必须使用NVL()函数来避免不可预料的结果的发生!”。根据实际的结果值进行如下操作:
DECLARE B_FLAG_TRUE BOOLEAN := TRUE; B_FLAG_FALSE BOOLEAN := FALSE; B_FLAG_NULL BOOLEAN :=NULL; B_FLAG_RESULT BOOLEAN;BEGIN B_FLAG_RESULT := (NVL(B_FLAG_NULL,FALSE) AND B_FLAG_TRUE); IF (B_FLAG_RESULT) THEN DBMS_OUTPUT.PUT_LINE('NULL AND TRUE'); END IF; IF NOT B_FLAG_RESULT THEN DBMS_OUTPUT.PUT_LINE('NOT (NULL AND TRUE)'); END IF;END;
让我们来看一下,在什么情况下会出现NULL值?
DECLARE TYPE T_ARR IS ARRAY(3) OF BOOLEAN; B_ARRAY T_ARR := T_ARR(TRUE,FALSE,NULL); B_FLAG BOOLEAN; V_STR VARCHAR2(100); FUNCTION TSBOOLEAN (B_FLAG BOOLEAN)RETURN VARCHAR2 IS BEGIN RETURN CASE B_FLAG WHEN TRUE THEN 'TRUE' WHEN FALSE THEN 'FALSE' ELSE 'NULL' END; END TSBOOLEAN;BEGIN FOR K IN 1..2 LOOP FOR I IN 1..3 LOOP FOR J IN 1..3 LOOP V_STR :=TSBOOLEAN(B_ARRAY(I)); IF K = 1 THEN V_STR := V_STR||' AND '; B_FLAG := (B_ARRAY(I) AND B_ARRAY(J)); ELSE V_STR := V_STR||' OR '; B_FLAG := (B_ARRAY(I) OR B_ARRAY(J)); END IF; V_STR := V_STR||TSBOOLEAN(B_ARRAY(J))||' ==> '; DBMS_OUTPUT.PUT_LINE (V_STR||TSBOOLEAN(B_FLAG)); END LOOP; END LOOP; END LOOP;END;
输出的结果如下:
TRUE AND TRUE ==> TRUE
TRUE AND FALSE ==> FALSE
TRUE AND NULL ==> NULL
FALSE AND TRUE ==> FALSE
FALSE AND FALSE ==> FALSE
FALSE AND NULL ==> FALSE
NULL AND TRUE ==> NULL
NULL AND FALSE ==> FALSE
NULL AND NULL ==> NULL
TRUE OR TRUE ==> TRUE
TRUE OR FALSE ==> TRUE
TRUE OR NULL ==> TRUE
FALSE OR TRUE ==> TRUE
FALSE OR FALSE ==> FALSE
FALSE OR NULL ==> NULL
NULL OR TRUE ==> TRUE
NULL OR FALSE ==> NULL
NULL OR NULL ==> NULL
- PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL
- PL/SQL的Boolean的三个值:TRUE,FALSE,NULL两两进行AND,OR操作的值
- js中Boolean值为false和true的情况:
- return,return true,return false三个的作用。
- true false 与TRUE FALSE 的区别
- FALSE/TRUE与false/true的区别
- FALSE/TRUE与false/true的区别
- FALSE/TRUE与false/true的区别
- FALSE/TRUE与false/true的区别
- 关于request.getSession(true/false/null)的区别
- 关于request.getSession(true/false/null)的区别
- 关于request.getSession(true/false/null)的区别
- 关于request.getSession(true/false/null)的区别
- 关于request.getSession(true/false/null)的区别
- 前台中: 1 和 0 传入到 vo 中 boolean 类型的是 true 还是 false?
- Boolean.valueOf(true)和true的区别
- js中 [] ? true : false 的返回值为什么是true?
- pl/sql中如何给boolean类型的变量赋值
- 开源BI工具之我见
- 什么是psu
- Spring--quartz中cronExpression配置说明
- 读取容器配置参数---context-param和init-param区别
- GPU加速技术揭秘
- PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL
- [C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
- HDU1397(以空间换取时间)
- 如何分配内存 内存碎片处理技术
- cmd 右鍵 解除svn
- 雷神的微软平台安全宝典
- 负数转换成二进制数
- HTML5多媒体开发指南
- JavaScript宝典(第7版)