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 閱讀(1639) 評論(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這樣的錯誤.  回復  更多評論
            

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


          網站導航:
           
          主站蜘蛛池模板: 奉新县| 三河市| 大洼县| 平度市| 凤山市| 苍梧县| 赤壁市| 张家界市| 出国| 衡水市| 定西市| 英吉沙县| 潼南县| 聊城市| 响水县| 陕西省| 沭阳县| 孝义市| 旺苍县| 忻州市| 泸水县| 太和县| 华蓥市| 杭锦旗| 南靖县| 美姑县| 游戏| 康平县| 新安县| 云安县| 西林县| 达尔| 兴和县| 江阴市| 大新县| 济源市| 望江县| 鞍山市| 普洱| 咸丰县| 苏尼特左旗|