posts - 60,comments - 71,trackbacks - 0

                   在ORACLE中進(jìn)行關(guān)聯(lián)查詢時(shí),作為關(guān)聯(lián)查詢的兩字段數(shù)據(jù)類型要一至,否則會(huì)報(bào):

                 ORA-01722:invalid number 

          這樣的錯(cuò)誤,如下查詢語句:

                select  * from A a,B b  where a.loginid=b.userid;

                  如果a.loginid的數(shù)據(jù)類型為:number(n),而b.userid的數(shù)據(jù)類型為:varchar2(n),則會(huì)報(bào)上面的錯(cuò)誤,要二者為同一數(shù)據(jù)類型,上面的查詢語句才能正確的被執(zhí)行,平時(shí)可能在做一些查詢統(tǒng)計(jì)時(shí)沒注意這些問題(可能表結(jié)構(gòu)是別人事先已經(jīng)建好了的,而我們只是去使用而于),所以當(dāng)我們在設(shè)計(jì)表結(jié)構(gòu)時(shí),如果以后某兩表(或多表)之間存在關(guān)聯(lián)關(guān)系,即查詢相關(guān)數(shù)據(jù)時(shí),要關(guān)聯(lián)它們之間的某些字段,這時(shí)我們就要注意了,要將到時(shí)可能用于關(guān)聯(lián)查詢的字段的數(shù)據(jù)類型設(shè)計(jì)為相同的類型,當(dāng)然字段長度可以不一樣,這樣到時(shí)關(guān)聯(lián)查詢時(shí)就不會(huì)有問題了,否則以后還要改字段數(shù)據(jù)類型,而且此時(shí)表中又有了數(shù)據(jù),為了防止數(shù)據(jù)丟失,改起來還有點(diǎn)麻煩.

                 這種問題在ORACLE關(guān)系數(shù)據(jù)庫中會(huì)出現(xiàn),在其它關(guān)系數(shù)據(jù)庫中不知道會(huì)不會(huì)出現(xiàn),猜測可能也會(huì)有類似問題.

                 注:  這可能是一個(gè)很簡單的問題,但這確可能是很容易忽視的問題,有時(shí)在設(shè)計(jì)表結(jié)構(gòu)時(shí),可能會(huì)由于考慮不周,造成以后要關(guān)聯(lián)查詢相關(guān)數(shù)據(jù)時(shí)出現(xiàn)上面的錯(cuò)誤,從而要去改變表的字段類型,從而帶來一些不必要的麻煩.
          posted on 2009-04-09 16:49 henry1451 閱讀(1639) 評(píng)論(2)  編輯  收藏

          FeedBack:
          # re: Oracle關(guān)聯(lián)查詢時(shí)對(duì)關(guān)聯(lián)字段的數(shù)據(jù)類型要求
          2009-04-09 21:05 | 123
          沒對(duì)吧  回復(fù)  更多評(píng)論
            
          # re: Oracle關(guān)聯(lián)查詢時(shí)對(duì)關(guān)聯(lián)字段的數(shù)據(jù)類型要求
          2009-04-10 18:08 | henry1451
          不好意思,上面說的是有些地方不正確,現(xiàn)在將一些不正確的地方做一些改正:

          1)上面舉到的例子中,當(dāng)a.loginid的數(shù)據(jù)類型為:number(n),而b.userid的數(shù)據(jù)類型為:varchar2(n),
          是不一定會(huì)報(bào)那個(gè)錯(cuò)誤的,即有可能不會(huì)報(bào)錯(cuò),即當(dāng)b.userid的數(shù)據(jù)內(nèi)容全部為阿拉伯?dāng)?shù)字"0-9"時(shí),是
          不會(huì)報(bào)錯(cuò)的,因?yàn)镺RACLE會(huì)對(duì)b.userid字段類型進(jìn)行隱式轉(zhuǎn)換,將字符串類型隱式轉(zhuǎn)換為number,所以當(dāng)
          B表中的b.userid字段內(nèi)容有英文字符或其他字符時(shí),則會(huì)報(bào)那個(gè)錯(cuò)誤,否則,當(dāng)數(shù)據(jù)內(nèi)容全部為"0-9"這樣的數(shù)字時(shí),關(guān)聯(lián)查詢是不
          會(huì)報(bào)那個(gè)錯(cuò)誤的;

          2)上面提到當(dāng)關(guān)聯(lián)的兩字段數(shù)據(jù)類型不一至?xí)r,會(huì)報(bào): ORA-01722:invalid number ,這也是不整確的,即當(dāng)
          當(dāng)一個(gè)字段類型為number,一個(gè)為:varchar時(shí),如果報(bào)錯(cuò),才會(huì)報(bào):ORA-01722:invalid number這樣的錯(cuò)誤,如果
          其中一個(gè)字段為日期型,或其他類型時(shí),報(bào)的則是另外的一種錯(cuò)誤,而不都是: ORA-01722:invalid number這樣的錯(cuò)誤.  回復(fù)  更多評(píng)論
            

          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 改则县| 项城市| 环江| 丹巴县| 瑞安市| 湛江市| 天水市| 孙吴县| 高淳县| 晋江市| 望江县| 长宁区| 绍兴市| 饶平县| 沁阳市| 洪泽县| 中宁县| 钦州市| 怀远县| 环江| 鹤壁市| 呼伦贝尔市| 太保市| 衡东县| 贡觉县| 文安县| 进贤县| 巫山县| 武定县| 景谷| 芮城县| 舒城县| 进贤县| 渑池县| 清镇市| 重庆市| 博爱县| 德清县| 阿荣旗| 台南市| 柳州市|