PL/SQL變數,常數和參數都必須有一個有效的資料類型,指定存儲格式,約束和值的有效範圍。本基礎教程介紹標準和LOB在PL/SQL,其他兩種資料類型可用的資料類型將涵蓋在後面的章節。
分類 | 描述 |
標準資料類型 | 單值沒有內部組件,如NUMBER, DATE 或 BOOLEAN |
大物件(LOB) | 指向其他資料項目,如文本,圖形圖像,影像檔剪輯和聲音等儲存大物件 |
集合 | 具有可單獨訪問的內部組件的資料項。例如,集合和記錄 |
引用 | 指向其他資料項目 |
PL/SQL標準資料類型和子類型(Subtype)
PL/SQL標準資料類型和子類型受到以下幾大類:
資料類型 | 描述 |
數字 | 在其上執行的算術運算的數值 |
字符 | 代表單個字符或字符的字母數字字符串值 |
布林 | 在其上執行的邏輯運算的邏輯值 |
日期時間 | 日期和時間 |
PL/SQL提供的資料類型的子類型。例如,資料類型數有一個叫作INTEGER的子類型。可以使用子類型在PL/SQL程序中,使資料類型與其他程序中的資料類型兼容,而嵌入PL/SQL代碼在另一個程序,如Java程序。
PL/SQL數值資料類型和子類型
以下是PL/ SQL預定義的數字資料類型及其子類型的詳細資訊:
資料類型 | 描述 |
PLS_INTEGER | 通過2,147,483,647到-2147483648範圍內有符號整數,以32位表示 |
BINARY_INTEGER | 通過2,147,483,647到-2147483648範圍內的有符號整數,以32位表示 |
BINARY_FLOAT | 單精度IEEE 754格式的浮點數 |
BINARY_DOUBLE | 雙精度IEEE 754格式的浮點數 |
NUMBER(prec, scale) | 定點或浮點數在範圍1E-130至(但不包括)絕對值1.0E126。 NUMBER變量也可以表示0 |
DEC(prec, scale) | ANSI具體的定點類型使用38位小數最大精度 |
DECIMAL(prec, scale) | IBM特定的固定點型具有38位小數最大精度 |
NUMERIC(pre, secale) | 浮點類型具有38位小數最大精度。 |
DOUBLE PRECISION | 具有126個二進製數字最大精度ANSI特定浮點型(約38位十進製數) |
FLOAT | 具有126個二進製數字(約38位十進製數)最大精度ANSI和IBM特定的浮點型 |
INT | 具有38位小數最大精度ANSI具體的整數類型 |
INTEGER | ANSI和IBM的38位小數最大精度具體的整數類型 |
SMALLINT | ANSI和IBM的38位小數最大精度具體的整數類型 |
REAL | 具有63位二進製數字最大精度浮點型(大約18位小數) |
下面是一個有效的宣告:
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
將產生以下結果:
PL/SQL
procedure successfully completed
PL/SQL字符資料類型和子類型
以下是PL/SQL預定義的字符資料類型及其子類型的詳細信息:
資料類型 | 描述 |
CHAR | 具有32,767個字節的最大尺寸固定長度字符串 |
VARCHAR2 | 具有32,767個字節的最大尺寸變長字符串 |
RAW | 可變長度的二進製或字節字符串的32,767個字節的最大尺寸,而不是由PL/ SQL解釋 |
NCHAR | 具有32,767個字節的最大尺寸的固定長度國家字符串 |
NVARCHAR2 | 具有32,767個字節的最大尺寸可變長度國家字符串 |
LONG | 具有32,760字節最大尺寸變長字符串 |
LONG RAW | 可變長度的二進製或字節字串的32,760字節的最大尺寸,而不是由PL/SQL解釋 |
ROWID | 物理行標識符,一行在一個普通的表中的地址 |
UROWID | 物理通用標識符號(物理,邏輯,或外國的行標識符號) |
PL/SQL布林資料類型
在邏輯運算中使用布林資料類型存儲的邏輯值。邏輯值為:true 和 false 的布林值以及
NULL 值。
但是,布林值不能用於:
·
SQL語法
·
內建SQL函數(如TO_CHAR)
·
從SQL語法中使用PL/ SQL函數
PL/SQL日期時間和間隔類型
DATE資料類型存儲固定長度的日期時間,其中包括每天在幾秒鐘內從午夜開始的時間。有效的日期範圍從公元前4712年1月1日至999912月31日。
默認的日期格式由Oracle初始化參數NLS_DATE_FORMAT設置。例如,默認的可以是“DD-MON-YY',它包括一個兩位數字的月份中的日期,月份名稱的縮寫,以及年的最後兩位數字,例如,01- OCT-12。
每個日期,包括世紀,年,月,日,時,分,秒。下表顯示了每個字段的有效值:
字段名稱 | 有效日期時間值 | 有效的間隔值 |
YEAR | -4712 to 9999 (年除外 0) | 任何非零整數 |
MONTH | 01 to 12 | 0 to 11 |
DAY | 01 to 31 (受製於年份和月份的數值,按日曆的區域設置的規則) | 任何非零整數 |
HOUR | 00 to 23 | 0 to 23 |
MINUTE | 00 to 59 | 0 to 59 |
SECOND | 00 to 59.9(n), 其中,9(n)是時間小數秒精度 | 0 to 59.9(n), 其中,9(n)是區間小數秒精度 |
TIMEZONE_HOUR | -12 to 14 (範圍可容納夏令時更改) | 不適用 |
TIMEZONE_MINUTE | 00 to 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 | 用於儲大size的字元資料在資料庫中 | 8 - 128 TB |
NCLOB | 用於在資料庫中儲存大Size的NCHAR資料 | 8 - 128 TB |
子類型是另一種資料類型,這是所謂的基本類型的子集。 子類型具有其基本類型相同的操作,但其隻是有效值的一個子集。
PL/SQL用戶定義的子類型(Subtype)
PL/SQL預定義了一些子類型的封裝標準。例如,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;
/
產生了以下結果:
Hello Reader
Welcome to the World of PL/SQL
PL/SQL
procedure successfully completed.
PL/SQL NULL
PL/SQL NULL值表示缺少或未知的資料,蛤它不是一個整數,字符,或任何其他特定的資料類型。需要注意的是NULL不是一樣的空資料串或空字符值'\0'。NULL可以被分配,但它不能與任何東西等同,包括其本身。
沒有留言:
張貼留言