2. PL/SQL資料類型

PL/SQL變數,常數和參數都必須有一個有效的資料類型,指定存儲格式,約束和值的有效範圍。本基礎教程介紹標準和LOBPL/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具體的整數類型
INTEGERANSI和IBM的38位小數最大精度具體的整數類型
SMALLINTANSI和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資料類型存儲固定長度的日期時間,其中包括每天在幾秒鐘內從午夜開始的時間。有效的日期範圍從公元前471211日至99991231日。
默認的日期格式由Oracle初始化參數NLS_DATE_FORMAT設置。例如,默認的可以是“DD-MON-YY',它包括一個兩位數字的月份中的日期,月份名稱的縮寫,以及年的最後兩位數字,例如,01- OCT-12
每個日期,包括世紀,年,月,日,時,分,秒。下表顯示了每個字段的有效值:
字段名稱有效日期時間值有效的間隔值
YEAR-4712 to 9999 (年除外 0)任何非零整數
MONTH01 to 120 to 11
DAY01 to 31 (受製於年份和月份的數值,按日曆的區域設置的規則)任何非零整數
HOUR00 to 230 to 23
MINUTE00 to 590 to 59
SECOND00 to 59.9(n), 其中,9(n)是時間小數秒精度0 to 59.9(n), 其中,9(n)是區間小數秒精度
TIMEZONE_HOUR-12 to 14 (範圍可容納夏令時更改)不適用
TIMEZONE_MINUTE00 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預定義的子類型CHARACTERINTEGER如下:
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可以被分配,但它不能與任何東西等同,包括其本身。

沒有留言:

張貼留言