標籤: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字元的比較