PL/SQL - 資料型別



在本章中,我們將討論 PL/SQL 中的資料型別。PL/SQL 變數、常量和引數必須具有有效的資料型別,該型別指定儲存格式、約束和有效值範圍。本章將重點介紹 **標量** 和 **LOB** 資料型別。其他兩種資料型別將在其他章節中介紹。

序號 類別和描述
1

標量

沒有內部元件的單個值,例如 **NUMBER**、**DATE** 或 **BOOLEAN**。

2

大型物件 (LOB)

指向儲存在其他資料項之外的大型物件的指標,例如文字、圖形影像、影片剪輯和聲音波形。

3

複合

具有可以單獨訪問的內部元件的資料項。例如,集合和記錄。

4

引用

指向其他資料項的指標。

PL/SQL 標量資料型別和子型別

PL/SQL 標量資料型別和子型別屬於以下類別:

序號 資料型別和描述
1

數值型

執行算術運算的數值。

2

字元型

表示單個字元或字元字串的字母數字值。

3

布林型

執行邏輯運算的邏輯值。

4

日期時間型

日期和時間。

PL/SQL 提供資料型別的子型別。例如,資料型別 NUMBER 具有名為 INTEGER 的子型別。您可以在 PL/SQL 程式中使用子型別,以使資料型別與其他程式中的資料型別相容,同時將 PL/SQL 程式碼嵌入到另一個程式中,例如 Java 程式。

PL/SQL 數值資料型別和子型別

下表列出了 PL/SQL 預定義的數值資料型別及其子型別:

序號 資料型別和描述
1

PLS_INTEGER

範圍為 -2,147,483,648 到 2,147,483,647 的帶符號整數,以 32 位表示

2

BINARY_INTEGER

範圍為 -2,147,483,648 到 2,147,483,647 的帶符號整數,以 32 位表示

3

BINARY_FLOAT

單精度 IEEE 754 格式浮點數

4

BINARY_DOUBLE

雙精度 IEEE 754 格式浮點數

5

NUMBER(prec, scale)

定點或浮點數,絕對值範圍為 1E-130 到(但不包括)1.0E126。NUMBER 變數也可以表示 0

6

DEC(prec, scale)

ANSI 特定的定點型別,最大精度為 38 位小數

7

DECIMAL(prec, scale)

IBM 特定的定點型別,最大精度為 38 位小數

8

NUMERIC(pre, secale)

浮點型別,最大精度為 38 位小數

9

DOUBLE PRECISION

ANSI 特定的浮點型別,最大精度為 126 位二進位制數字(大約 38 位小數)

10

FLOAT

ANSI 和 IBM 特定的浮點型別,最大精度為 126 位二進位制數字(大約 38 位小數)

11

INT

ANSI 特定的整數型別,最大精度為 38 位小數

12

INTEGER

ANSI 和 IBM 特定的整數型別,最大精度為 38 位小數

13

SMALLINT

ANSI 和 IBM 特定的整數型別,最大精度為 38 位小數

14

REAL

浮點型別,最大精度為 63 位二進位制數字(大約 18 位小數)

以下是一個有效的宣告:

DECLARE 
   num1 INTEGER; 
   num2 REAL; 
   num3 DOUBLE PRECISION; 
BEGIN 
   null; 
END; 
/ 

當以上程式碼編譯並執行時,會產生以下結果:

PL/SQL procedure successfully completed 

PL/SQL 字元資料型別和子型別

以下是 PL/SQL 預定義的字元資料型別及其子型別的詳細資訊:

序號 資料型別和描述
1

CHAR

固定長度字元字串,最大大小為 32,767 位元組

2

VARCHAR2

可變長度字元字串,最大大小為 32,767 位元組

3

RAW

最大大小為 32,767 位元組的可變長度二進位制或位元組字串,PL/SQL 不對其進行解釋

4

NCHAR

固定長度國家字元字串,最大大小為 32,767 位元組

5

NVARCHAR2

可變長度國家字元字串,最大大小為 32,767 位元組

6

LONG

可變長度字元字串,最大大小為 32,760 位元組

7

LONG RAW

最大大小為 32,760 位元組的可變長度二進位制或位元組字串,PL/SQL 不對其進行解釋

8

ROWID

物理行識別符號,普通表中行的地址

9

UROWID

通用行識別符號(物理、邏輯或外部行識別符號)

PL/SQL 布林資料型別

**BOOLEAN** 資料型別儲存用於邏輯運算的邏輯值。邏輯值是布林值 **TRUE** 和 **FALSE** 以及值 **NULL**。

但是,SQL 沒有與 BOOLEAN 等效的資料型別。因此,布林值不能用於:

  • SQL 語句
  • 內建 SQL 函式(例如 **TO_CHAR**)
  • 從 SQL 語句呼叫的 PL/SQL 函式

PL/SQL 日期時間和間隔型別

**DATE** 資料型別用於儲存固定長度的日期時間,其中包括自午夜以來的秒數。有效日期範圍從公元前 4712 年 1 月 1 日到公元 9999 年 12 月 31 日。

預設日期格式由 Oracle 初始化引數 NLS_DATE_FORMAT 設定。例如,預設值可能是 'DD-MON-YY',其中包括月份的兩位數字、月份名稱的縮寫以及年份的後兩位數字。例如,01-OCT-12。

每個 DATE 包括世紀、年份、月份、日期、小時、分鐘和秒。下表顯示每個欄位的有效值:

欄位名稱 有效日期時間值 有效間隔值
YEAR -4712 到 9999(不包括年份 0) 任何非零整數
MONTH 01 到 12 0 到 11
DAY 01 到 31(受月份和年份的值限制,根據區域設定的日曆規則) 任何非零整數
HOUR 00 到 23 0 到 23
MINUTE 00 到 59 0 到 59
SECOND 00 到 59.9(n),其中 9(n) 是時間小數秒的精度 0 到 59.9(n),其中 9(n) 是間隔小數秒的精度
TIMEZONE_HOUR -12 到 14(範圍適應夏令時變化) 不適用
TIMEZONE_MINUTE 00 到 59 不適用
TIMEZONE_REGION 在動態效能檢視 V$TIMEZONE_NAMES 中找到 不適用
TIMEZONE_ABBR 在動態效能檢視 V$TIMEZONE_NAMES 中找到 不適用

PL/SQL 大型物件 (LOB) 資料型別

大型物件 (LOB) 資料型別指的是大型資料項,例如文字、圖形影像、影片剪輯和聲音波形。LOB 資料型別允許對這些資料進行高效、隨機、分段訪問。以下是預定義的 PL/SQL LOB 資料型別:

資料型別 描述 大小
BFILE 用於儲存資料庫外部作業系統檔案中的大型二進位制物件。 系統相關。不能超過 4 千兆位元組 (GB)。
BLOB 用於儲存資料庫中的大型二進位制物件。 8 到 128 太位元組 (TB)
CLOB 用於儲存資料庫中大型字元資料塊。 8 到 128 TB
NCLOB 用於儲存資料庫中大型 NCHAR 資料塊。 8 到 128 TB

PL/SQL 使用者定義的子型別

子型別是另一個數據型別的子集,稱為其基型別。子型別與其基型別具有相同的有效操作,但僅具有其有效值的子集。

PL/SQL 在包 **STANDARD** 中預定義了幾個子型別。例如,PL/SQL 預定義了子型別 **CHARACTER** 和 **INTEGER**,如下所示:

SUBTYPE CHARACTER IS CHAR; 
SUBTYPE INTEGER IS NUMBER(38,0);

您可以定義和使用自己的子型別。以下程式說明了定義和使用使用者定義的子型別:

DECLARE 
   SUBTYPE name IS char(20); 
   SUBTYPE message IS varchar2(100); 
   salutation name; 
   greetings message; 
BEGIN 
   salutation := 'Reader '; 
   greetings := 'Welcome to the World of PL/SQL'; 
   dbms_output.put_line('Hello ' || salutation || greetings); 
END; 
/ 

當以上程式碼在 SQL 提示符下執行時,會產生以下結果:

Hello Reader Welcome to the World of PL/SQL 
 
PL/SQL procedure successfully completed. 

PL/SQL 中的 NULL 值

PL/SQL NULL 值表示 **缺失** 或 **未知資料**,它們不是整數、字元或任何其他特定資料型別。請注意,**NULL** 與空資料字串或空字元值 **'\0'** 不同。可以分配 null,但不能將其與任何內容等同,包括自身。

廣告