Oracle中常用的資料型別

路途中的人2012發表於2016-03-20
整理自《OCP認證指南
001
    當建表時,每一列都分配一種資料型別,它決定了可以插入該列的值的特性。這些資料型別也用來指定PL/SQL過程和函式的引數的特性。在選擇資料型別時,必須考慮要儲存的資料和要在它上面執行的操作空間也是需要考慮的事項:有些資料型別是固定長度的,不管其中是什麼資料,都佔用相同的位元組數;有些資料型別的長度則是可變的。如果沒有填充列,那麼Oracle根本不會給它提供任何空間。如果後面更新行來填充列,那麼行會變得更大,而不管資料型別是固定長度還是可變長度。

002    
下面的資料型別適合於字母數字資料:
    varchar2 可變長度的字元資料,從1B到4KB。資料儲存在資料庫字符集中。
    nvarchar2 和varchar2一樣,但資料儲存在國家語言字符集(它是許可的unicode字符集之一)中。
    char 固定長度的字元資料,從1B到2KB,它儲存在資料庫字符集中。如果資料不夠列的長度,就會用空格進行填充。
    注意:為了符合ISO/ANSI,可以指定varchar資料型別,但這種型別的所有列都會自動轉換為varchar2。

003 
    下面的資料型別適合於數字資料,它們都是可變長度的:
    number 數字資料,可以指定它的精度和小數位數。精度範圍是1-38,小數位數範圍是從-84到127.
    float 這是一個ANSI資料型別,精度為126位二進位制、38位十進位制的浮點數。Oracle還提供binary_float和binary_double作為備選。
    integer 相當於number,小數位數為0.

004 下面的資料型別適用於日期和時間資料,它們都是固定長度的:
    date 它的長度為0(如果列為空)或者7個位元組。所有date資料都包含世紀、年、月、日、時、分和秒。其有效範圍為公元前4712年1月1日至公元9999年12月31日。
    timestamp 如果列為空,那麼它的長度為0,或者達到11位元組(這取決於指定的精度)。與date類似,但對秒而言,其精度最多為9位,預設為6位。
    timestamp with timezone 和timestamp一樣,但在儲存資料時可以指定時區。根據精度,長度可能達到13個位元組。該資料型別讓Oracle透過將兩個時區規範化為UTC來確定它們之間的差,即使這兩個時間在不同的時區。
    timestamp with local timezone 和timestamp一樣,但資料在儲存時被規範化為資料庫時區。當檢索時,將其規範化為選擇它的使用者程式所在的時區。
    interval year to month 用於記錄兩個date或timestamp之間以年和月為單位的時間間隔。
    interval day to second 用於記錄兩個date或timestamp之間以天和秒為單位的時間間隔。

005 下面是大物件資料型別:
    CLOB 儲存在資料庫字符集中的字元資料,大小沒有限制:4GB乘以資料庫塊的大小。
    NCLOB 和CLOB一樣,但資料儲存在可選的國家語言字符集(它是許可的unicode字符集之一)中。
    BLOB 和CLOB一樣,但二進位制資料不會被Oracle Net執行字符集轉換。
    BFILE 定位器,它指向儲存在資料庫伺服器的作業系統上的檔案。檔案的大小限制為4GB。
    LONG 資料庫字符集中的字元資料,大小可達到2GB。LONG的所有功能(甚至更多)都由CLOB提供,不能在現代資料庫中使用LONG,如果資料庫有這種型別的列,應該將它們轉換為CLOB。在表中只能有一個LONG列。
    LONG RAW 和LONG一樣,但Oracle Net不會轉換二進位制資料。所有LONG RAW列都應該轉換為BLOB。

006 下面是RAW和ROWID資料型別:
    RAW 可變長度的二進位制資料,從1B到4KB。和char和varchar2資料型別不同,在select時,Oracle Net不會將RAW資料從資料庫的字符集轉換為使用者程式的字符集,或者在insert時進行反向轉換。
    ROWID 以64為基數編碼的值,它是一個指向表中行的位置的指標。它裡面是實體地址。ROWID是Oracle專有的資料型別,除非特別選擇,否則不可見。

007 補充
    varchar2資料型別必須用一個數來限定,這個數表示列的最大長度。如果插入列的值小於這個值,那麼沒有問題:這個值只佔用必要的空間。如果這個值比最大值還要長,那麼insert會出現錯誤。如果將值更新為更長或更短的值,那麼列的長度(和行本身)也會相應改變。如果沒有輸入,或者更新為Null,那麼它根本不會佔用空間。
    可以使用精度和小數位來限定number資料型別。精度設定數中的最大位數,小數位數表示小數點右邊有多少位。如果小數位數是負數,那麼會用0取代插入的數的最後幾位,它不佔用精度指定的位數。如果位數超過精度,那麼會出現錯誤;如果它在精度之內但在小數位之外,那麼數字會舍入為最小數位內最接近的值。
    date資料型別總是包括世紀、年、月、日、時、分、秒——即使在插入時沒有指定所有這些元素。必須指定年、月、日。如果省略時、分、秒,那麼它們預設為午夜。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29067253/viewspace-2060362/,如需轉載,請註明出處,否則將追究法律責任。

相關文章