Oracle 中的 NULL

來源:互聯網
上載者:User
 

    NULL的算術運算:

    在Oracle中,值null被看作一個未知值,任何包含NULL值的算術運算都會得到結果NULL。因此,下面的select語句返回null:    Null 字元串:Oracle 把Null 字元串 ('') 當作 null, 因此 length('') 的值是null, 而不是 0。這與 ansi 不相容。

SELECT 5 + 7 + NULL + 9
  FROM DUAL;

 

    真值表:

    列印boolean類型與 and 或 or 操作的真值表:    bool1  bool2|   and     or
    ------------+-------------
     true   true|  true   true
     true  false| false   true
     true   null|  null   true
    false   true| false   true
    false  false| false  false
    false   null| false   null
     null   true|  null   true
     null  false| false   null
     null   null|  null   null

CREATE TABLE booleans ( bool VARCHAR2(5) );

INSERT INTO booleans
     VALUES ('true');
INSERT INTO booleans
     VALUES ('false');
INSERT INTO booleans
     VALUES ('null');

DECLARE
   bool_1     BOOLEAN;
   bool_2     BOOLEAN;
   bool_and   BOOLEAN;
   bool_or    BOOLEAN;
   res_and    VARCHAR2 (5);
   res_or     VARCHAR2 (5);

   FUNCTION string_to_bool (str IN VARCHAR2)
      RETURN BOOLEAN
   IS
   BEGIN
      RETURN CASE
         WHEN str = 'true'
            THEN TRUE
         WHEN str = 'false'
            THEN FALSE
         WHEN str = 'null'
            THEN NULL
      END;
   END;

   FUNCTION bool_to_str (bool IN BOOLEAN)
      RETURN VARCHAR2
   IS
   BEGIN
      RETURN CASE
         WHEN bool = TRUE
            THEN 'true'
         WHEN bool = FALSE
            THEN 'false'
         WHEN bool IS NULL
            THEN 'null'
      END;
   END;
BEGIN
   DBMS_OUTPUT.put_line ('bool1  bool2|   and     or');
   DBMS_OUTPUT.put_line ('------------+-------------');

   FOR b1 IN (SELECT bool
                FROM booleans)
   LOOP
      FOR b2 IN (SELECT bool
                   FROM booleans)
      LOOP
         bool_1 := string_to_bool (b1.bool);
         bool_2 := string_to_bool (b2.bool);
         bool_and := bool_1 AND bool_2;
         bool_or := bool_1 OR bool_2;
         res_and := bool_to_str (bool_and);
         res_or := bool_to_str (bool_or);
         DBMS_OUTPUT.put_line (   LPAD (b1.bool, 5)
                               || '  '
                               || LPAD (b2.bool, 5)
                               || '| '
                               || LPAD (res_and, 5)
                               || '  '
                               || LPAD (res_or, 5)
                              );
      END LOOP;
   END LOOP;
END;
/

 


    組值函數中的NULL:    組值函數對待NULL值的方式與單值函數不同。組值函數忽略NULL值並計算出結果。這些函數包括avg、sum、min、max、stddev、variance、count。NULL值可能對max、min以及sum產生很大影響,因此在使用它們時要小心,特別是占重要百分比的資料為NULL時更要小心。    在這些函數中,Oracle返回非空值,但由你決定此結果是否合理。

    count是一個特例。不論用什麼方法處理null,它總是返回一個數字,它不對NULL求值。

    NULL與操作符:

    一個null值與任何其它值比較,包括null值,結果都是null。如下所示:
      op left rel   op right
   ---------- --- ----------
           11  =          11
           11  <          42
           11  ?
           42  >          11
           42  =          42
           42  ?
               ?          11
               ?          42
               ?

CREATE TABLE operand ( op NUMBER );

INSERT INTO operand
     VALUES (11);
INSERT INTO operand
     VALUES (42);
INSERT INTO operand
     VALUES (NULL);

SELECT op_left.op "op left",
       CASE
          WHEN op_left.op = op_right.op
             THEN ' = '
          WHEN op_left.op > op_right.op
             THEN ' > '
          WHEN op_left.op < op_right.op
             THEN ' < '
          ELSE ' ? '
       END "rel",
       op_right.op "op right"
  FROM operand op_left CROSS JOIN operand op_right
       ;

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.