首頁>Club>
14
回覆列表
  • 1 # mg56069716

    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;

  • 中秋節和大豐收的關聯?
  • 三峽大壩的三天行程,有哪些推薦嗎?