细说plsql中的空值表达式
最近寫sql的時候遇到了一些麻煩,一翻深究之后發現了關于空值表達式的規律,先看幾個例子:
?
declare
? a integer;
? b integer;
? c boolean;
begin
? a := 1;
? b := null;
? c := (a=b);
? if a = b then
??? dbms_output.put_line('print yes');
? else
??? dbms_output.put_line('print no');
? end if;
end;
結果是輸出:print no
?
再反過來,寫成
declare
? a integer;
? b integer;
? c boolean;
begin
? a := 1;
? b := null;
? c := (a!=b);
? if a != b then
??? dbms_output.put_line('print yes');
? else
??? dbms_output.put_line('print no');
? end if;
end;
結果仍然是輸出:print no
?
規律第一條:if條件中如果使用null來判斷,那么結果總是為(非真)。
用dabug工具跟蹤后發現,c的實際值既不是TURE也不是FALSE,也不是NULL,而是什么都沒有(變量跟蹤的值域里面空空如也,連“NULL”都不顯示)。
?
進一步研究發現:
(NULL and TRUE)、(TRUE and NULL)、(NULL or FALSE)、(FALSE or NULL)的值都是非真且什么都沒有;
(NULL or TRUE)、(TRUE or NULL)的值為TRUE;
(NULL and FALSE)、(FALSE and NULL)的值為FALSE;
?
規律第二條:and和or是有交換律的。
規律第三條:在and表達式中,只要有一個FALSE,就可以確定該表達式的值(為FALSE);在or表達式中,只要有一個TRUE,就可以確定該表達式的值(為TRUE);chucizhiwei
?
總結
以上是生活随笔為你收集整理的细说plsql中的空值表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 抗日战争解读八年侵华战争中国死了多少日本
- 下一篇: 开关机自动执行脚本方法[以及切换用户执行