vincen 发表于 2018-10-24 09:12:45

PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL-cuug520

  Oracle的PL/SQL中的BOOLEAN类型有三个取值,分别是TRUE、FALSE以及NULL。这三个值会给开发的时候造成不必要的麻烦,例如
  cuug每周五晚8点都有免费网络课程,详情可点击http://www.51CTO提醒您,请勿滥发广告!.cn
  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;

页: [1]
查看完整版本: PL/SQL的BOOLEAN的三个值:TRUE,FALSE,NULL-cuug520