oracle中在可為null的欄位上做邏輯關係運算要格外小心,如 <>,>,=,<,任何與null的運算結果都返回false,
因此對於可能為null的欄位運算判斷要用 is null 來判斷,或者使用函式nvl、decode處理後在判斷,比如:
where 欄位名 is null 或者where nvl(欄位名,0) = 0; -- 假設欄位型別是數字
在Oracle中,如果兩個列值是null,那麼這兩個列值是不能用=號進行比較的,需要判斷一下NVL(XXX,Y)=NVL(XXXX,Y)
當列值為null時,則賦值相同的Y,然後進行比較,不為null時,則直接比較。
AND NVL(T.INV_NO,0) = NVL(T1.INV_NO,0)
Oracle中的空字串基本上是被當成空NULL來處理的,我們可以從下面的得到印證。
select nvl("","NULL") from dual 返回"NULL",select 1 from dual where "" is null 返回1。
如果我們在往資料表裡插資料的時候,把某個值賦成空串(""),而查詢條件加入了諸如col_x = ""等條件的話,結果是無法查出來的。
反過來,在使用||連線符時,NULL值又被當作空串來使用。select NULL || "XX" from dual將返回串"XX"。
然而,空串""與空值NULL還是有些區別的,"" = ""返回的結果為真,而NULL = ""將返回空;"" is NULL 不報錯,而NULL is "" 將發生找不到關鍵字NULL的錯誤。
把判斷兩個字串是否相等的功能寫成函式:
create or replace function isequal(var1 in varchar2, var2 in varchar2)
return number -- 0:不等 1:相等 -1:錯誤
is
begin
if (var1 is null and var2 is null or
var1 is not null and var2 is not null and var1 = var2) then
return 1;
else
return 0;
end if;
exception
when others then
return - 1;
end;
oracle中在可為null的欄位上做邏輯關係運算要格外小心,如 <>,>,=,<,任何與null的運算結果都返回false,
因此對於可能為null的欄位運算判斷要用 is null 來判斷,或者使用函式nvl、decode處理後在判斷,比如:
where 欄位名 is null 或者where nvl(欄位名,0) = 0; -- 假設欄位型別是數字
在Oracle中,如果兩個列值是null,那麼這兩個列值是不能用=號進行比較的,需要判斷一下NVL(XXX,Y)=NVL(XXXX,Y)
當列值為null時,則賦值相同的Y,然後進行比較,不為null時,則直接比較。
AND NVL(T.INV_NO,0) = NVL(T1.INV_NO,0)
Oracle中的空字串基本上是被當成空NULL來處理的,我們可以從下面的得到印證。
select nvl("","NULL") from dual 返回"NULL",select 1 from dual where "" is null 返回1。
如果我們在往資料表裡插資料的時候,把某個值賦成空串(""),而查詢條件加入了諸如col_x = ""等條件的話,結果是無法查出來的。
反過來,在使用||連線符時,NULL值又被當作空串來使用。select NULL || "XX" from dual將返回串"XX"。
然而,空串""與空值NULL還是有些區別的,"" = ""返回的結果為真,而NULL = ""將返回空;"" is NULL 不報錯,而NULL is "" 將發生找不到關鍵字NULL的錯誤。
把判斷兩個字串是否相等的功能寫成函式:
create or replace function isequal(var1 in varchar2, var2 in varchar2)
return number -- 0:不等 1:相等 -1:錯誤
is
begin
if (var1 is null and var2 is null or
var1 is not null and var2 is not null and var1 = var2) then
return 1;
else
return 0;
end if;
exception
when others then
return - 1;
end;