Oracle 隱式轉換與顯式轉換____Oracle

來源:互聯網
上載者:User

 

隱式轉換的發生條件

 

       當來源資料的類型和目標資料的類型不同的時候,如果沒有轉換函式,就會發生隱式轉換,也稱自動轉換。當然,有些情況下有些類型是不可以發生轉換的,比如說從DATE類型轉換到NUMBER類型就會報錯。

 

隱式轉換的問題

 

       第一,  隱式轉換的最大問題就是轉換時會導致索引的無效,進而可能導致全表掃描。當表的資料量很大的時候,產生會很大的效能問題。比如說,VARCHAR2和NVARCHAR2隱式資料類型轉換導致的效能問題:

                      http://www.oracleonlinux.cn/2012/07/varchar_nvarchar_implicit_change_data_type/

       第二,  由於隱式轉換使得資料庫編程人員和DBA難以瞭解到究竟發生了怎樣的類型轉換,而且如果代碼很多很長的話要查出錯誤就需要費很大的勁。比如說,每一個函數都有輸入參數,如果函數的輸入資料的資料類型跟函數的輸入參數要求的資料類型不同的話,就會發生隱式轉換,如果這兩種類型之間不能轉換的話就會報錯。由於其錯誤發生得相當隱蔽,尋找起來也相當麻煩。

 

問題的解決

 

第一:使用轉換函式,也就是顯式轉換。

         每一種資料類型都有一組專門針對該類型資料進行處理的函數。如TO_CHAR,TO_CLOB等。其中,最常用的有三個,也就是數實值型別、字元類型和日期類型資料之間的轉換。如下:

TO_CHAR:把DATE或NUMBER轉換成字串;

TO_DATE:把NUMBER、CHAR或VARCHAR2轉換成DATE。當用到時間戳記時,可以用到TO_TIMESTAMP或TO_TIMESTAMP_TZ。

TO_NUMBER:  把CHAR或VARCHAR2轉換成NUMBER。這裡需要注意的是,不能把DATE類型轉換成NUMBER類型;

第二:避免隱式轉換。

           在資料庫設計的時候,最好遵循“資料是什麼類型,就把它設計成什麼類型的”的原則,比如說,不要可以把日期類型的資料設計成字元型。

          還有一個原則就是,在相對安全的地方使用函數,比如說對數值使用串處理函數,而不對串使用算術運算函數。

另外,為了方便以後對程式進行檢查,最好在適當的地方標註出資料類型的自動轉換。

 

           對於Oracle的資料類型,可以參考下面的文章:

                                   http://ajita.iteye.com/blog/1424143       

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.