在本章中,我們將討論和學習PL/SQL中的資料型別。 PL/SQL變數,常數和引數必須具有有效的資料型別,它指定儲存格式,約束和有效的值範圍。本節將重點介紹SCALAR
和LOB
資料型別。其他兩個資料型別(複合型別和參照型別)將在後面的章節中介紹。
NUMBER
,DATE
或BOOLEAN
等。PL/SQL標量資料型別和子型別分為以下幾類:
序號 | 型別 | 描述 |
---|---|---|
1 | 數位 | 執行算術運算的數值。 |
2 | 字元 | 表示單個字元或字串的字母數位值。 |
3 | 布林 | 執行邏輯運算的邏輯值。 |
4 | 日期時間 | 用於表示日期和時間的值 |
PL/SQL提供了資料型別的子型別。例如,NUMBER
資料型別具有一個叫作INTEGER
的子型別。 您可以使用PL/SQL程式中的子型別將資料型別與其他程式中的資料型別相容,同時將PL/SQL程式碼嵌入到另一個程式(如Java程式)中。
下表列出了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 位二進位制數位(約十八位數) |
以下是有效的宣告 -
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
當上述程式碼編譯和執行時,它產生以下結果 -
PL/SQL procedure successfully completed
以下是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 |
通用行識別符號(物理,邏輯或外部行識別符號) |
BOOLEAN
資料型別儲存邏輯運算中使用的邏輯值。邏輯值為布林值:TRUE
,FALSE
以及NULL
值。
但是,SQL沒有類似於BOOLEAN
的資料型別。 因此,布林值不能用於 -
TO_CHAR
)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 |
01 ~ 11 |
DAY |
01 至31 (限於MONTH 和YEAR 的值,根據本地日曆的規則) |
任何非零整數 |
HOUR |
00 ~ 23 |
00 ~ 23 |
MINUTE |
00 ~ 59 |
00 ~ 59 |
SECOND |
00 ~ 59.9(n) ,其中9(n) 是時間分秒的精度 |
00 ~ 59.9(n) ,其中9(n) 是間隔分數秒的精度 |
TIMEZONE_HOUR |
-12 至14 (範圍適應夏令時更改) |
不適用 |
TIMEZONE_MINUTE |
00 ~ 59 |
不適用 |
TIMEZONE_REGION |
在動態效能檢視V$TIMEZONE_NAMES 找到 |
不適用 |
TIMEZONE_ABBR |
在動態效能檢視V$TIMEZONE_NAMES 找到 |
不適用 |
大物件(LOB)資料型別指的是巨量資料項,如文字,圖形影象,視訊剪輯和聲音波形。 LOB資料型別允許對資料進行高效,隨機,分段存取。以下是預定義的PL/SQL LOB資料型別 -
資料型別 | 描述 | 大小 |
---|---|---|
BFILE |
用於在資料庫外的作業系統檔案中儲存大型二進位制物件。 | 取決於系統,但不得超過4GB 。 |
BLOB |
用於在資料庫中儲存的大型二進位制物件 | 8TB 至128TB |
CLOB |
用於在資料庫中儲存大字元資料。 | 8TB 至128TB |
NCLOB |
用於在資料庫中儲存大塊NCHAR 資料。 |
8TB 至128TB |
子型別是另一種資料型別的子集,它稱為基本型別。子型別具有與其基本型別相同的操作,但只有基本型別有效值的子集。
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
值表示丟失或未知資料,它們不是整數,字元或任何其他特定資料型別。 請注意,NULL
與空資料字串或空字元值\0
不同。可以將一個null
值分配給其它變數,但不能等同於任何東西,包括其自身(null
)。