posts - 60,comments - 71,trackbacks - 0

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

                 ORA-01722:invalid number 

          這樣的錯(cuò)誤,如下查詢(xún)語(yǔ)句:

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

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

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

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

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

          1)上面舉到的例子中,當(dāng)a.loginid的數(shù)據(jù)類(lèi)型為:number(n),而b.userid的數(shù)據(jù)類(lèi)型為: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字段類(lèi)型進(jìn)行隱式轉(zhuǎn)換,將字符串類(lèi)型隱式轉(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)查詢(xún)是不
          會(huì)報(bào)那個(gè)錯(cuò)誤的;

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

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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 鹤峰县| 于田县| 毕节市| 八宿县| 广饶县| 开封县| 平塘县| 海原县| 佛学| 阳高县| 衡水市| 兴安盟| 太仆寺旗| 瑞安市| 吴江市| 响水县| 黄大仙区| 遵义市| 海阳市| 深泽县| 万州区| 来安县| 方山县| 兴义市| 调兵山市| 师宗县| 新密市| 永德县| 万荣县| 来宾市| 英超| 靖安县| 保康县| 永宁县| 凌海市| 松阳县| 瑞金市| 宜阳县| 鄄城县| 昌邑市| 龙海市|