激情五月天婷婷,亚洲愉拍一区二区三区,日韩视频一区,a√天堂中文官网8

<ul id="buwfs"><strike id="buwfs"><strong id="buwfs"></strong></strike></ul>
    <output id="buwfs"></output>
  • <dfn id="buwfs"><source id="buwfs"></source></dfn>
      <dfn id="buwfs"><td id="buwfs"></td></dfn>
      <div id="buwfs"><small id="buwfs"></small></div>
      <dfn id="buwfs"><source id="buwfs"></source></dfn>
      1. <dfn id="buwfs"><td id="buwfs"></td></dfn>
        始創(chuàng)于2000年 股票代碼:831685
        咨詢熱線:0371-60135900 注冊有禮 登錄
        • 掛牌上市企業(yè)
        • 60秒人工響應(yīng)
        • 99.99%連通率
        • 7*24h人工
        • 故障100倍補(bǔ)償
        全部產(chǎn)品
        您的位置: 網(wǎng)站首頁 > 幫助中心>文章內(nèi)容

        Oracle中的NULL和空字符串

        發(fā)布時(shí)間:  2012/8/30 16:47:18

        Oracle中有個(gè)關(guān)鍵字叫NULL,它表示某個(gè)值是未知的、是不確定的。既然是未知的,就有無數(shù)種的可能性。因此,NULL并不是一個(gè)確定的值。先看兩個(gè)例子吧:

        例1:

        declare 

        v_b1 boolean:=null; --布爾值可以賦值null.當(dāng)然它另外兩種值只能是true,false了


         

        v_a int := null; 
        v_b int := null;      --整數(shù)可以給它賦值null
        v_s  varchar2(20):= null ; --字符也可以賦值null
        begin
        if(v_a= v_b) then          --v_a 和v_b都是null但此處判斷的結(jié)果是它們并不相等.改成v_a =null結(jié)果仍然是一樣
        dbms_output.put_line('v_a equal v_b');
        else
        dbms_output.put_line('v_a not equal v_b');--輸出這個(gè)結(jié)果
        end if;

        if(v_b1) then          --把v_b1改成not v_b1結(jié)果都一樣.也就是v_b1和把它取反都不會(huì)是true
        dbms_output.put_line('v_b1 equal true');
        else
        dbms_output.put_line('v_b1 is not true');--輸出這個(gè)結(jié)果
        end if;

        if(true or v_b1) then          --輸出v_b1 equal true
        dbms_output.put_line('v_b1 equal true');
        else
        dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判斷條件改成true and v_b1 則輸入這條語句
        end if;
        end;


         

        例2:

        create table test (ename char(1),constraint ck_test check(ename in ('a',null)));

        --上面的語句創(chuàng)建一個(gè)表,只有一列ename,給此列添加約束條件,它的值只能在列表('a',null)中.但實(shí)際上我們可以插入任何字符.這時(shí)貌似null可以代表所有的字符了.去掉它只能插入'a'

        但如果我們這樣創(chuàng)建表

        create table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));

        --按我們猜想如果null能代表所有字符了那它取反就是不能輸入任何字符.但實(shí)際上不是.此處它貌似沒起任何作用.去掉它和不去掉效果一樣.都可以插入除'a'外的任何字符


        1.怎么理解null的這些用法



        看了上面兩個(gè)例子是不是有點(diǎn)暈了啊,其實(shí)我們可以這樣理解.既然null是個(gè)不確定的類型,就可以轉(zhuǎn)變成任何類型中的任何值.就像C#中的object類型.它是任何類型的父類.可以代表任何類型.我們可以在運(yùn)行程序時(shí)再去動(dòng)態(tài)確定它的具體類型.那么null如果是處在一個(gè)條件判斷條件中得讓它取特定類型的所有值去進(jìn)行判斷.如果結(jié)果都為真才為真.

        如例1中兩個(gè)整數(shù)值v_a,v_b都是null.要讓他們相等得讓null取所有的整數(shù)去判斷.那樣自然不可能都相等.所以為假.而true or v_b1之所以為真了是因?yàn)閛r前面的為真的話不去對后面的v_b1做判斷了.而v_b1和not v_b1都為假則可以認(rèn)為v_b1可以取true和false,把這兩種值都代入則不可能保證都為true所以最終結(jié)果為false.

        這樣來理解了null就不難明白為什么我們在一個(gè)表中插入一個(gè)null值.但我們不能通過判斷條件=null來查詢.不過Oracle提供了關(guān)鍵字is來判斷一個(gè)值是否是null.

        例2中第二種情況是有點(diǎn)反常.我們就當(dāng)作如果什么都不讓用戶插入,但建個(gè)表沒啥意義.所以不這樣
         

        至于Oracle后臺(tái)是怎么存儲(chǔ)null值和操作null值的就不清楚了啊.


         

        2.null和空字符串



        其實(shí)空字符串和其他字符的操作是一樣的.只是用它的時(shí)候眼神要好點(diǎn),別搞錯(cuò)了.舉個(gè)例子

        先建表create table arwen(ename varchar2(1)); --此列只能插入一個(gè)字符
         

        insert into arwen values(' ');--注意引號(hào)中是一個(gè)空格.如果是兩個(gè)空格會(huì)出錯(cuò)的,因?yàn)槭莾蓚(gè)字符了.

        select * from arwen where ename = ' '; --返回一行.這里引號(hào)中也必須是一個(gè)空格.

        如果是''也就是引號(hào)中沒空格.那插入它時(shí)Oracle默認(rèn)把它變成null了.所以如果引號(hào)中沒空格我們就不能叫它空字符串了啊.不知道叫啥好啊.覺得有null了它好像有點(diǎn)多余

        例如create table arwen(eno int);

        insert into arwen values(44);

        insert into arwen alues(''); --引號(hào)是沒有空格
         

        insert into arwen alues(null);

        這上面三條語句都會(huì)成功插入.

        雖然''被默認(rèn)轉(zhuǎn)換成null但我們不能用is '' 或=''來用它

        例如你select count(*) from arwen 或者select count(*) from arwen where ename is null--結(jié)果是3 
         

        但如果是select count(*) from arwen where ename is ‘’ 或者 select count(*) from arwen where ename =‘’結(jié)果就是0


         

        3.我們要用到null時(shí)常會(huì)用到函數(shù)nvl函數(shù).



        就是如果碰到哪個(gè)地方是null就把它轉(zhuǎn)換成其他的東東

        例如上面插入三行后我們這樣查找select nvl(ename,11) from arwen; --結(jié)果是44     11     11

        ename如果是null就轉(zhuǎn)換成11如果不是null就原樣輸出


         


         

        4.使用null時(shí)注意



        在用avg,max,min這些函數(shù)時(shí)會(huì)把null忽略掉

        比如create table arwen(eno int);

        insert into arwen values(1);

        insert into arwen values(2);

        insert into arwen values(null);

        select avg(eno) from arwen;--結(jié)果為1.5.這是因?yàn)楹雎缘鬾ull了不然應(yīng)該是1的

        select max(eno) from arwen;--結(jié)果為2

        如果在排序中會(huì)把null當(dāng)作最大值處理.就像無窮大一樣


         

        在往表中插入數(shù)據(jù)時(shí)如果某列沒有插入值就讓它為null,這對用戶來說是非常方便的.但在其他地方用它好像沒太大必要.所以盡量別用好了.

        只是在對表做些操作時(shí)多注意考慮到null判斷就好.多用nvl函數(shù)和is null判斷


        本文出自:億恩科技【mszdt.com】


         

        v_a int := null; 
        v_b int := null;      --整數(shù)可以給它賦值null
        v_s  varchar2(20):= null ; --字符也可以賦值null
        begin
        if(v_a= v_b) then          --v_a 和v_b都是null但此處判斷的結(jié)果是它們并不相等.改成v_a =null結(jié)果仍然是一樣
        dbms_output.put_line('v_a equal v_b');
        else
        dbms_output.put_line('v_a not equal v_b');--輸出這個(gè)結(jié)果
        end if;

        if(v_b1) then          --把v_b1改成not v_b1結(jié)果都一樣.也就是v_b1和把它取反都不會(huì)是true
        dbms_output.put_line('v_b1 equal true');
        else
        dbms_output.put_line('v_b1 is not true');--輸出這個(gè)結(jié)果
        end if;

        if(true or v_b1) then          --輸出v_b1 equal true
        dbms_output.put_line('v_b1 equal true');
        else
        dbms_output.put_line('v_b1 is not true'); -- 如果把前面的判斷條件改成true and v_b1 則輸入這條語句
        end if;
        end;


         

        例2:

        create table test (ename char(1),constraint ck_test check(ename in ('a',null)));

        --上面的語句創(chuàng)建一個(gè)表,只有一列ename,給此列添加約束條件,它的值只能在列表('a',null)中.但實(shí)際上我們可以插入任何字符.這時(shí)貌似null可以代表所有的字符了.去掉它只能插入'a'

        但如果我們這樣創(chuàng)建表

        create table test1 (ename char(1),constraint ck_test check(ename not in ('a',null)));

        --按我們猜想如果null能代表所有字符了那它取反就是不能輸入任何字符.但實(shí)際上不是.此處它貌似沒起任何作用.去掉它和不去掉效果一樣.都可以插入除'a'外的任何字符


        1.怎么理解null的這些用法



        看了上面兩個(gè)例子是不是有點(diǎn)暈了啊,其實(shí)我們可以這樣理解.既然null是個(gè)不確定的類型,就可以轉(zhuǎn)變成任何類型中的任何值.就像C#中的object類型.它是任何類型的父類.可以代表任何類型.我們可以在運(yùn)行程序時(shí)再去動(dòng)態(tài)確定它的具體類型.那么null如果是處在一個(gè)條件判斷條件中得讓它取特定類型的所有值去進(jìn)行判斷.如果結(jié)果都為真才為真.

        如例1中兩個(gè)整數(shù)值v_a,v_b都是null.要讓他們相等得讓null取所有的整數(shù)去判斷.那樣自然不可能都相等.所以為假.而true or v_b1之所以為真了是因?yàn)閛r前面的為真的話不去對后面的v_b1做判斷了.而v_b1和not v_b1都為假則可以認(rèn)為v_b1可以取true和false,把這兩種值都代入則不可能保證都為true所以最終結(jié)果為false.

        這樣來理解了null就不難明白為什么我們在一個(gè)表中插入一個(gè)null值.但我們不能通過判斷條件=null來查詢.不過Oracle提供了關(guān)鍵字is來判斷一個(gè)值是否是null.

        例2中第二種情況是有點(diǎn)反常.我們就當(dāng)作如果什么都不讓用戶插入,但建個(gè)表沒啥意義.所以不這樣
         

        至于Oracle后臺(tái)是怎么存儲(chǔ)null值和操作null值的就不清楚了啊.


         

        2.null和空字符串



        其實(shí)空字符串和其他字符的操作是一樣的.只是用它的時(shí)候眼神要好點(diǎn),別搞錯(cuò)了.舉個(gè)例子

        先建表create table arwen(ename varchar2(1)); --此列只能插入一個(gè)字符
         

        insert into arwen values(' ');--注意引號(hào)中是一個(gè)空格.如果是兩個(gè)空格會(huì)出錯(cuò)的,因?yàn)槭莾蓚(gè)字符了.

        select * from arwen where ename = ' '; --返回一行.這里引號(hào)中也必須是一個(gè)空格.

        如果是''也就是引號(hào)中沒空格.那插入它時(shí)Oracle默認(rèn)把它變成null了.所以如果引號(hào)中沒空格我們就不能叫它空字符串了啊.不知道叫啥好啊.覺得有null了它好像有點(diǎn)多余

        例如create table arwen(eno int);

        insert into arwen values(44);

        insert into arwen alues(''); --引號(hào)是沒有空格
         

        insert into arwen alues(null);

        這上面三條語句都會(huì)成功插入.

        雖然''被默認(rèn)轉(zhuǎn)換成null但我們不能用is '' 或=''來用它

        例如你select count(*) from arwen 或者select count(*) from arwen where ename is null--結(jié)果是3 
         

        但如果是select count(*) from arwen where ename is ‘’ 或者 select count(*) from arwen where ename =‘’結(jié)果就是0


         

        3.我們要用到null時(shí)常會(huì)用到函數(shù)nvl函數(shù).



        就是如果碰到哪個(gè)地方是null就把它轉(zhuǎn)換成其他的東東

        例如上面插入三行后我們這樣查找select nvl(ename,11) from arwen; --結(jié)果是44     11     11

        ename如果是null就轉(zhuǎn)換成11如果不是null就原樣輸出


         


         

        4.使用null時(shí)注意



        在用avg,max,min這些函數(shù)時(shí)會(huì)把null忽略掉

        比如create table arwen(eno int);

        insert into arwen values(1);

        insert into arwen values(2);

        insert into arwen values(null);

        select avg(eno) from arwen;--結(jié)果為1.5.這是因?yàn)楹雎缘鬾ull了不然應(yīng)該是1的

        select max(eno) from arwen;--結(jié)果為2

        如果在排序中會(huì)把null當(dāng)作最大值處理.就像無窮大一樣


         

        在往表中插入數(shù)據(jù)時(shí)如果某列沒有插入值就讓它為null,這對用戶來說是非常方便的.但在其他地方用它好像沒太大必要.所以盡量別用好了.

        只是在對表做些操作時(shí)多注意考慮到null判斷就好.多用nvl函數(shù)和is null判斷


        本文出自:億恩科技【www.enidc.com】
        -->

        服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]

      2. 您可能在找
      3. 億恩北京公司:
      4. 經(jīng)營性ICP/ISP證:京B2-20150015
      5. 億恩鄭州公司:
      6. 經(jīng)營性ICP/ISP/IDC證:豫B1.B2-20060070
      7. 億恩南昌公司:
      8. 經(jīng)營性ICP/ISP證:贛B2-20080012
      9. 服務(wù)器/云主機(jī) 24小時(shí)售后服務(wù)電話:0371-60135900
      10. 虛擬主機(jī)/智能建站 24小時(shí)售后服務(wù)電話:0371-60135900
      11. 專注服務(wù)器托管17年
        掃掃關(guān)注-微信公眾號(hào)
        0371-60135900
        Copyright© 1999-2019 ENKJ All Rights Reserved 億恩科技 版權(quán)所有  地址:鄭州市高新區(qū)翠竹街1號(hào)總部企業(yè)基地億恩大廈  法律顧問:河南亞太人律師事務(wù)所郝建鋒、杜慧月律師   京公網(wǎng)安備41019702002023號(hào)
          0
         
         
         
         

        0371-60135900
        7*24小時(shí)客服服務(wù)熱線