posts - 60,comments - 71,trackbacks - 0

                   在ORACLE中進行關聯查詢時,作為關聯查詢的兩字段數據類型要一至,否則會報:

                 ORA-01722:invalid number 

          這樣的錯誤,如下查詢語句:

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

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

                 這種問題在ORACLE關系數據庫中會出現,在其它關系數據庫中不知道會不會出現,猜測可能也會有類似問題.

                 注:  這可能是一個很簡單的問題,但這確可能是很容易忽視的問題,有時在設計表結構時,可能會由于考慮不周,造成以后要關聯查詢相關數據時出現上面的錯誤,從而要去改變表的字段類型,從而帶來一些不必要的麻煩.
          posted on 2009-04-09 16:49 henry1451 閱讀(1640) 評論(2)  編輯  收藏

          FeedBack:
          # re: Oracle關聯查詢時對關聯字段的數據類型要求
          2009-04-09 21:05 | 123
          沒對吧  回復  更多評論
            
          # re: Oracle關聯查詢時對關聯字段的數據類型要求
          2009-04-10 18:08 | henry1451
          不好意思,上面說的是有些地方不正確,現在將一些不正確的地方做一些改正:

          1)上面舉到的例子中,當a.loginid的數據類型為:number(n),而b.userid的數據類型為:varchar2(n),
          是不一定會報那個錯誤的,即有可能不會報錯,即當b.userid的數據內容全部為阿拉伯數字"0-9"時,是
          不會報錯的,因為ORACLE會對b.userid字段類型進行隱式轉換,將字符串類型隱式轉換為number,所以當
          B表中的b.userid字段內容有英文字符或其他字符時,則會報那個錯誤,否則,當數據內容全部為"0-9"這樣的數字時,關聯查詢是不
          會報那個錯誤的;

          2)上面提到當關聯的兩字段數據類型不一至時,會報: ORA-01722:invalid number ,這也是不整確的,即當
          當一個字段類型為number,一個為:varchar時,如果報錯,才會報:ORA-01722:invalid number這樣的錯誤,如果
          其中一個字段為日期型,或其他類型時,報的則是另外的一種錯誤,而不都是: ORA-01722:invalid number這樣的錯誤.  回復  更多評論
            

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 财经| 连山| 华蓥市| 澜沧| 曲沃县| 忻城县| 敦煌市| 兴义市| 叶城县| 视频| 门源| 华阴市| 宣威市| 乐至县| 德庆县| 睢宁县| 边坝县| 德兴市| 德化县| 本溪| 海林市| 黔江区| 静安区| 临颍县| 金寨县| 怀集县| 禄丰县| 永寿县| 山西省| 枞阳县| 易门县| 江油市| 都兰县| 汉沽区| 铁岭市| 翼城县| 芒康县| 佛山市| 来凤县| 汨罗市| 南召县|