【轉】ORACLE資料型別

林堯彬發表於2020-04-04
本文轉自:http://www.baanerp.com/post/95.html
欄位型別   中文說明   限制條件   其它說明    
  CHAR   固定長度字串   最大長度2000   bytes          
  VARCHAR2   可變長度的字串   最大長度4000   bytes     可做索引的最大長度749    
  NCHAR   根據字符集而定的固定長度字串   最大長度2000   bytes          
  NVARCHAR2   根據字符集而定的可變長度字串   最大長度4000   bytes          
  DATE   日期(日-月-年)   DD-MM-YY(HH-MI-SS)   經過嚴格測試,無千蟲問題    
  LONG   超長字串   最大長度2G(231-1)   足夠儲存大部頭著作    
  RAW   固定長度的二進位制資料   最大長度2000   bytes     可存放多媒體圖象聲音等    
  LONG   RAW   可變長度的二進位制資料   最大長度2G   同上    
  BLOB   二進位制資料   最大長度4G        
  CLOB   字元資料   最大長度4G        
  NCLOB   根據字符集而定的字元資料   最大長度4G        
  BFILE   存放在資料庫外的二進位制資料   最大長度4G        
  ROWID   資料表中記錄的唯一行號   10   bytes   ********.****.****格式,*為0或1    
  NROWID   二進位制資料表中記錄的唯一行號   最大長度4000   bytes    
  NUMBER(P,S)   數字型別   P為整數位,S為小數位    
  DECIMAL(P,S)   數字型別   P為整數位,S為小數位    
  INTEGER   整數型別   小的整數    
  FLOAT   浮點數型別   NUMBER(38),雙精度    
  REAL   實數型別   NUMBER(63),精度更高    
資料型別 引數 描述
char(n) n=1 to 2000位元組 定長字串,n位元組長,如果不指定長度,預設為1個位元組長(一個漢字為2位元組)
varchar2(n) n=1 to 4000位元組 可變長的字串,具體定義時指明最大長度n,
這種資料型別可以放數字、字母以及ASCII碼字符集(或者EBCDIC等資料庫系統接受的字符集標準)中的所有符號。
如果資料長度沒有達到最大值n,Oracle 8i會根據資料大小自動調節欄位長度,
如果你的資料前後有空格,Oracle 8i會自動將其刪去。VARCHAR2是最常用的資料型別。
可做索引的最大長度3209。
number(m,n) m=1 to 38
n=-84 to 127
可變長的數值列,允許0、正值及負值,m是所有有效數字的位數,n是小數點以後的位數。
如:number(5,2),則這個欄位的最大值是99,999,如果數值超出了位數限制就會被擷取多餘的位數。
如:number(5,2),但在一行資料中的這個欄位輸入575.316,則真正儲存到欄位中的數值是575.32。
如:number(3,0),輸入575.316,真正儲存的資料是575。
date 從公元前4712年1月1日到公元4712年12月31日的所有合法日期,
Oracle 8i其實在內部是按7個位元組來儲存日期資料,在定義中還包括小時、分、秒。
預設格式為DD-MON-YY,如07-11月-00 表示2000年11月7日。
long 可變長字元列,最大長度限制是2GB,用於不需要作字串搜尋的長串資料,如果要進行字元搜尋就要用varchar2型別。
long是一種較老的資料型別,將來會逐漸被BLOB、CLOB、NCLOB等大的物件資料型別所取代。
raw(n) n=1 to 2000 可變長二進位制資料,在具體定義欄位的時候必須指明最大長度n,Oracle 8i用這種格式來儲存較小的圖形檔案或帶格式的文字檔案,如Miceosoft Word文件。
raw是一種較老的資料型別,將來會逐漸被BLOB、CLOB、NCLOB等大的物件資料型別所取代。
long raw 可變長二進位制資料,最大長度是2GB。Oracle 8i用這種格式來儲存較大的圖形檔案或帶格式的文字檔案,如Miceosoft Word文件,以及音訊、視訊等非文字檔案。
在同一張表中不能同時有long型別和long raw型別,long raw也是一種較老的資料型別,將來會逐漸被BLOB、CLOB、NCLOB等大的物件資料型別所取代。
blob
clob
nclob
三種大型物件(LOB),用來儲存較大的圖形檔案或帶格式的文字檔案,如Miceosoft Word文件,以及音訊、視訊等非文字檔案,最大長度是4GB。
LOB有幾種型別,取決於你使用的位元組的型別,Oracle 8i實實在在地將這些資料儲存在資料庫內部儲存。
可以執行讀取、儲存、寫入等特殊操作。
bfile 在資料庫外部儲存的大型二進位制物件檔案,最大長度是4GB。
這種外部的LOB型別,通過資料庫記錄變化情況,但是資料的具體儲存是在資料庫外部進行的。
Oracle 8i可以讀取、查詢BFILE,但是不能寫入。
大小由作業系統決定。
資料型別是列或儲存過程中的一個屬性。

    Oracle支援的資料型別可以分為三個基本種類:字元資料型別、數字資料型別以及表示其它資料的資料型別。

    字元資料型別

     CHAR            char資料型別儲存固定長度的字元值。一個CHAR資料型別可以包括1到2000個字元。如果對CHAR沒有明確地說明長度,它的預設長度則設定為1。如果對某個CHAR型別變數賦值,其長度小於規定的長度,那麼Oracle自動用空格填充。

     VARCHAR2 儲存可變長度的字串。雖然也必須指定一個VARCHAR2資料變數的長度,但是這個長度是指對該變數賦值的最大長度而非實際賦值長度。不需用空格填充。最多可設定為4000個字元。因為VARCHAR2資料型別只儲存為該列所賦的字元(不加空格),所以VARCHAR2需要的儲存空間比CHAR資料型別要小。

    Oracle推薦使用VARCHAR2

     NCHAR和NVARCHAR2 NCHAR和NVARCHAR2資料型別分別儲存固定長度與可變長度的字串,但是它們使用的是和資料庫其他型別不同的字符集。在建立資料庫時,需要指定所使用的字符集,以便對資料中資料進行編碼。還可以指定一個輔助的字符集[即本地語言集]。NCHAR和NVARCHAR2型別的列使用輔助字符集。NCHAR和NVARCHAR2型別的列使用輔助字符集。

     在Oracle 9i中,可以以字元而不是位元組為單位表示NCHAR和NVARCHAR2列的長度。

     LONG long資料型別可以存放2GB的字元資料,它是從早期版本中繼承下來的。現在如果儲存大容量的資料,Oracle推薦使用CLOB和NCLOB資料型別。在表和SQL語句中使用LONG型別有許多限制。

     CLOB和NCLOB   CLOB和NCLOB資料型別可以儲存多達4GB的字元資料。NCLOB資料型別可儲存NLS資料。

     數字資料型別

     Oracle使用標準、可變長度的內部格式來儲存數字。這個內部格式精度可以高達38位。

     NUMBER資料型別可以有兩個限定符,如:column NUMBER(precision,scale)。precision表示數字中的有效位。如果沒有指定precision的話,Oracle將使用38作為精度。scale表示小數點右邊的位數,scale預設設定為0。如果把scale設成負數,Oracle將把該數字取捨到小數點左邊的指定位數。

     日期資料型別

      Oracle標準日期格式為:DD-MON-YY HH:MI:SS

      通過修改例項的引數NLS_DATE_FORMAT,可以改變例項中插入日期的格式。在一個會話期間,可以通過Alter session SQL命令來修改日期,或者通過使用SQL語句的TO_DATE表示式中的引數來更新一個特定值。

      其它的資料型別

      RAW和LONG RAW    RAW和LONG RAW資料型別主要用於對資料庫進行解釋。指定這兩種型別時,Oracle以位的形式來儲存資料。RAW資料型別一般用於儲存有特定格式的物件,如點陣圖。RAW資料型別可佔用2KB的空間,而LONG RAW資料型別則可以佔用2GB大小。

      ROWID ROWID是一種特殊的列型別,稱之為偽列(pseudocolumn)。ROWID偽列在SQL SELECT語句中可以像普通列那樣被訪問。Oracle資料庫中每行都有一個偽列。ROWID表示行的地址,ROWID偽列用ROWID資料型別定義。

      ROWID與磁碟驅動的特定位置有關,因此,ROWID是獲得行的最快方法。但是,行的ROWID會隨著解除安裝和過載資料庫而發生變化,因此建議不要在事務中使用ROWID偽列的值。例如,一旦當前應用已經使用完記錄,就沒有理由儲存行的ROWID。不能通過任何SQL語句來設定標準的ROWID偽列的值。

     列或變數可以定義成ROWID資料型別,但是Oracle不能保證該列或變數的值是一個有效的ROWID。

    LOB(大型物件)資料型別,可以儲存4GB的資訊。LOB有以下3中型別:

     <CLOB>,只能儲存字元資料

    <NCLOB>,儲存本地語言字符集資料

    <BLOB>   ,以二進位制資訊儲存資料

     可以指定將一個LOB資料儲存在Oracle資料庫內,還是指向一個包含次資料的外部檔案。

     LOB可以參與事務。管理LOB中的資料必須通過DBMS_LOB PL/SQL內建軟體包或者OGI介面。

     為了便於將LONG資料型別轉換成LOB,Oracle 9i包含許多同時支援LOB和LONG的函式,喊包括一個ALTER TABLE語句的新選擇,它允許將LONG資料型別自動轉換成LOB。

    BFILE

     BFILE資料型別用做指向儲存在Oracle資料庫以外的檔案的指標。

     XML Type

     作為對XML支援的一部分,Oracle 9i包含了一個新的資料型別XML Type。定義為XMLType的列將儲存一個字元LOB列中的XML文件。有許多內建的功能可以使你從文件中抽取單個節點,還可以在XML Type文件中對任何節點建立索引。

     使用者自定義資料

     從Oracle 8以後,使用者可以定義自己的複雜資料型別,它們由Oracle基本資料型別組合而成。

     AnyType、AnyData和AnyDataSet

      Oracle包括3個新的資料型別,用於定義在現有資料型別之外的資料結構。其中每種資料型別必須用程式單元來定義,以便讓Oracle9i知道如何處理這些型別的特定實現。

    型別轉換

    Oracle會自動將某些資料型別轉換成其他的資料型別,轉換取決於包括該值的SQL語句。

    資料轉換還可以通過Oracle的型別轉換函式顯示地進行。

    連線與比較

    在大多數平臺上Oracle SQL中的連線操作符用兩條豎線(||)表示。連線是將兩個字元值連線。Oracle的自動型別轉換功能使得兩個數字值也可以進行連線。

    NULL

    NULL值是關聯式資料庫的重要特徵之一。實際上,NULL不代表任何值,它表示沒有值。如果要建立表的一個列,而這個列必須有值,那麼應將它指定為NOT NULL,這表示該列不能包含NULL值。

    任何資料型別都可以賦予NULL值。NULL值引入了SQL運算的三態邏輯。如果比較的一方是NULL值,那麼會出現3種狀態:TURE、FALSE以及兩者都不是。

    因為NULL值不等於0或其他任何值,所以測試某個資料是否為NULL值只能通過關係運算子IS NULL來進行。

    NULL值特別適合以下情況:當一個列還未賦值時。如果選擇不使用NULL值,那麼必須對行的所有列都要賦值。這實際上也取消了某列不需要值的可能性,同時對它賦的值也很容易產生誤解。這種情況則可能誤導終端使用者,並且導致累計操作的錯誤結果。

number(p,s)
p:1~38
s:-84~127
p>0,對s分2種情況:1. s>0
精確到小數點右邊s位,並四捨五入。然後檢驗有效數位是否<=p;如果s>p,小數點右邊至少有s-p個0填充。
2. s<0
精確到小數點左邊s位,並四捨五入。然後檢驗有效數位是否<=p+|s|

123.2564 NUMBER 123.2564

1234.9876 NUMBER(6,2) 1234.99

12345.12345 NUMBER(6,2) Error

1234.9876 NUMBER(6) 1235

12345.345 NUMBER(5,-2) 12300

1234567 NUMBER(5,-2) 1234600

12345678 NUMBER(5,-2) Error

123456789 NUMBER(5,-4) 123460000

1234567890 NUMBER(5,-4) Error

12345.58 NUMBER(*, 1) 12345.6

0.1 NUMBER(4,5) Error

0.01234567 NUMBER(4,5) 0.01235

0.09999 NUMBER(4,5) 0.09999

轉載於:https://www.cnblogs.com/feima-lxl/archive/2008/03/07/1095600.html

相關文章