首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 8 資料類型全景:標量、複合、REF、LOB 四大家族深度解析

     編輯:Oracle 資料庫基礎

一、 標量類型 — 單一值,無內部結構

1. 數字族

  • NUMBER(p,s):十進制儲存,運算時轉二進制。精度 p≤38,刻度 s∈[-84,127]。NUMBER(5,2) 範圍 -999.99~999.99。
  • BINARY_INTEGER:帶號整數,二進制補碼儲存,迴圈計數器首選,**無溢位錯誤**(自動轉 NUMBER)。
  • PLS_INTEGER:同 BINARY_INTEGER 但**硬體運算、極快**,溢位**報錯**。**新代碼首選**。

2. 字元族

型別長度語意最大長度(PL/SQL)最大長度(資料欄)補齊行為
CHAR字元32,7672,000空格補齊至定長
VARCHAR2字元/位元組32,7674,000不補齊,變長
LONG位元組32,7602 GB已棄用,改用 CLOB
NCHAR / NVARCHAR2字元同 CHAR/VARCHAR2同 CHAR/VARCHAR2國家字元集(NLS_NCHAR_CHARACTERSET)

**多位元組環境**(如 ZHS16GBK):VARCHAR2(200) 可存 200 英文字元或 100 中文字元。**建議統一用 AL32UTF8 + VARCHAR2**。

3. 原始/二進制族

  • RAW(n):不做字元集轉換,最大 2,000(欄)/ 32,767(變數)。
  • LONG RAW:最大 2 GB,已棄用,改用 BLOB。

4. 日期族

  • DATE:7 位元組(世紀、年、月、日、時、分、秒),**無千年蟲問題**,範圍前 4712 年 ~ 後 9999 年。

5. 列標識、布林、可信標籤

  • ROWID:物理/邏輯列地址,ROWIDTOCHAR 轉字串。
  • BOOLEAN:TRUE/FALSE/NULL,**僅 PL/SQL 可用**,SQL 不支援。
  • MLSLABEL:Trusted Oracle 安全標籤,標準 Oracle 僅能存 NULL。

二、 複合類型 — 由標量組合而成

1. 記錄


TYPE rec_type IS RECORD (
  f1 type1 [NOT NULL] [:= expr1],
  ...
  fn typen [NOT NULL] [:= exprn]
);
v_rec rec_type;

類似 CREATE TABLE 但只存在於 PL/SQL 區塊,**非持久化**。

2. PL/SQL 表 = 關聯陣列


TYPE tab_type IS TABLE OF scalar_type INDEX BY BINARY_INTEGER;
v_tab tab_type;
  • 兩欄結構:KEY (BINARY_INTEGER) + VALUE (scalar_type)。
  • 稀疏、無上限、索引可負數、非連續。

3. 物件類型與集合

  • Object Type:封裝屬性與方法,支援繼承、多型。
  • Nested Table:可持久化為資料欄,支援 MULTISET 運算。
  • VARRAY:固定上限、有序、連續儲存。

三、 REF 類型 — 指向物件的指標

  • REF CURSOR:游標變數,動態查詢核心。
  • REF obj_type:指向物件實例的 OID,導航物件圖。

四、 LOB 類型 — 大物件,最大 4 GB(12c+ 128 TB)

型別儲存位置內容字元集轉換
CLOB資料庫內部單位元組字元資料是
NCLOB資料庫內部固定寬度多位元組字元是
BLOB資料庫內部無結構二進制否
BFILE**OS 檔案系統**唯讀二進制檔案否
  • LOB 定義欄位時可指定 STORAGE 子句(CHUNK, PCTVERSION, CACHE 等)。
  • 操作需透過 DBMS_LOB 套件或 OCI 流式 API。
  • SecureFiles (11g+):啟用壓縮、重複資料刪除、加密、高效能寫入。

結語

Oracle 8 奠定了至今沿用的類型體系:**標量對應 SQL 欄位、複合支援程式化邏輯、REF 實現物件導向、LOB 處理非結構化大資料**。選型原則:**能用標量不用複合、能用 VARCHAR2/NUMBER/DATE 不用 LONG/RAW、大物件必用 LOB、新代碼索引用 PLS_INTEGER**。深入理解儲存語意(字元 vs 位元組、內部 vs 外部、字元集轉換),是避免資料截斷、亂碼、效能劣化的關鍵。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved