oracle中NULL字元的比較

來源:互聯網
上載者:User

標籤:ar   sp   div   bs   line   sql   程式   oracle   har   

在ORACLE中,將Null 字元串視為NULL,任何值與NULL比較結果都為NULL。如此一來,在比較兩個字串的時候就會出現意外。請看以下的例子:

DECLARE     i VARCHAR2(10) := NULL;    v VARCHAR2(10) := ‘ABC‘;BEGIN    IF(i = v) THEN        DBMS_OUTPUT.PUT_LINE(‘相等‘);    ELSE        DBMS_OUTPUT.PUT_LINE(‘不等‘);    END IF;END;請你用你聰明的頭腦判斷一下,結果應該是什嗎?很容易就可以得出結果:‘不等‘。很好,你是對的。在SQLPLUS上啟動並執行結果和你想的一樣。那麼我改一下程式,你再判斷一下:DECLARE     i VARCHAR2(10) := NULL;    v VARCHAR2(10) := ‘ABC‘;BEGIN    IF(i <> v) THEN        DBMS_OUTPUT.PUT_LINE(‘不等‘);    ELSE        DBMS_OUTPUT.PUT_LINE(‘相等‘);    END IF;END;看上去和第一個程式沒有太大的差別,很容易就得出結果:‘不等‘。呵呵。你確定結果就是這個嗎?那麼請你在SQLPLUS測試一下,來驗證你是正確的。很可惜,正確的結果應該是:‘相等‘。是不是很詫異?正如開始所說的:任何值與NULL比較結果都為NULL。即在第一個程式中的i=v比較的結果應該是NULL,而第二個程式中的i<>v比較的結果也是NULL。當IF結構中的條件為NULL時,將跳過當前的分支進入到ELSE或者是結束。不行嗎?那你運行一下以下的程式將可以等到驗證:BEGIN    IF(NULL) THEN        DBMS_OUTPUT.PUT_LINE(‘NOT NULL‘);    ELSE        DBMS_OUTPUT.PUT_LINE(‘NULL‘);    END IF;END;結果輸出的是:‘NULL‘。

oracle中NULL字元的比較

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.