鍍金池/ 教程/ 數(shù)據(jù)庫/ PL/SQL數(shù)據(jù)類型
PL/SQL記錄
PL/SQL基本語法
PL/SQL集合
PL/SQL包
PL/SQL關(guān)系運算符
PL/SQL比較運算符
PL/SQL條件控制
PL/SQL字符串
PL/SQL算術(shù)運算符
PL/SQL變量
PL/SQL IF-THEN-ELSIF語句
PL/SQL函數(shù)
PL/SQL異常
PL/SQL FOR循環(huán)語句
PL/SQL日期及時間
PL/SQL EXIT語句
PL/SQL DBMS輸出
PL/SQL過程
PL/SQL CONTINUE語句
PL/SQL數(shù)組
PL/SQL嵌套IF-THEN-ELSE語句
PL/SQL事務(wù)
PL/SQL CASE語句
PL/SQL IF-THEN語句
PL/SQL GOTO語句
PL/SQL運算符優(yōu)先級
PL/SQL觸發(fā)器
PL/SQL運算符
PL/SQL教程
PL/SQL WHILE循環(huán)語句
PL/SQL面向?qū)ο?/span>
PL/SQL循環(huán)
PL/SQL邏輯運算符
PL/SQL IF-THEN-ELSE語句
PL/SQL數(shù)據(jù)類型
PL/SQL環(huán)境安裝設(shè)置
PL/SQL游標
PL/SQL基本循環(huán)語句
PL/SQL搜索CASE語句
PL/SQL常量和文字
PL/SQL嵌套循環(huán)

PL/SQL數(shù)據(jù)類型

PL/SQL變量,常量和參數(shù)都必須有一個有效的數(shù)據(jù)類型,指定存儲格式,約束和值的有效范圍。本教程介紹標量和LOB在PL/SQL,其他兩種數(shù)據(jù)類型可用的數(shù)據(jù)類型將涵蓋在后面的章節(jié)。

分類 描述
標量 單值沒有內(nèi)部組件,如NUMBER, DATE 或 BOOLEAN
大對象(LOB) 指向其他數(shù)據(jù)項,如文本,圖形圖像,視頻剪輯和聲音等存儲大對象
復(fù)合 具有可單獨訪問的內(nèi)部組件的數(shù)據(jù)項。例如,集合和記錄
引用 指向其他數(shù)據(jù)項

PL/SQL標量數(shù)據(jù)類型和子類型

PL/SQL標量數(shù)據(jù)類型和子類型受到以下幾大類:

數(shù)據(jù)類型 描述
數(shù)字 在其上執(zhí)行的算術(shù)運算的數(shù)值
字符 代表單個字符或字符的字母數(shù)字字符串值
布爾 在其上執(zhí)行的邏輯運算的邏輯值
日期時間 日期和時間

PL/SQL提供的數(shù)據(jù)類型的子類型。例如,數(shù)據(jù)類型數(shù)有一個叫作INTEGER的子類型??梢允褂米宇愋驮赑L/SQL程序中,使數(shù)據(jù)類型與其他程序中的數(shù)據(jù)類型兼容,而嵌入PL/SQL代碼在另一個程序,如Java程序。

PL/SQL數(shù)值數(shù)據(jù)類型和子類型

以下是PL/ SQL預(yù)定義的數(shù)字數(shù)據(jù)類型及其子類型的詳細信息:

數(shù)據(jù)類型 描述
PLS_INTEGER 通過2,147,483,647到-2147483648范圍內(nèi)有符號整數(shù),以32位表示
BINARY_INTEGER 通過2,147,483,647到-2147483648范圍內(nèi)的有符號整數(shù),以32位表示
BINARY_FLOAT 單精度IEEE 754格式的浮點數(shù)
BINARY_DOUBLE 雙精度IEEE 754格式的浮點數(shù)
NUMBER(prec, scale) 定點或浮點數(shù)在范圍1E-130至(但不包括)絕對值1.0E126。 NUMBER變量也可以表示0
DEC(prec, scale) ANSI具體的定點類型使用38位小數(shù)最大精度
DECIMAL(prec, scale) IBM特定的固定點型具有38位小數(shù)最大精度
NUMERIC(pre, secale) 浮點類型具有38位小數(shù)最大精度。
DOUBLE PRECISION 具有126個二進制數(shù)字最大精度ANSI特定浮點型(約38位十進制數(shù))
FLOAT 具有126個二進制數(shù)字(約38位十進制數(shù))最大精度ANSI和IBM特定的浮點型
INT 具有38位小數(shù)最大精度ANSI具體的整數(shù)類型
INTEGER ANSI和IBM的38位小數(shù)最大精度具體的整數(shù)類型
SMALLINT ANSI和IBM的38位小數(shù)最大精度具體的整數(shù)類型
REAL 具有63位二進制數(shù)字最大精度浮點型(大約18位小數(shù))

下面是一個有效的聲明:

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

讓我們編譯和運行上面的程序,這將產(chǎn)生以下結(jié)果:

PL/SQL procedure successfully completed

PL/SQL字符數(shù)據(jù)類型和子類型

以下是PL/SQL預(yù)定義的字符數(shù)據(jù)類型及其子類型的詳細信息:

數(shù)據(jù)類型 描述
CHAR 具有32,767個字節(jié)的最大尺寸固定長度字符串
VARCHAR2 具有32,767個字節(jié)的最大尺寸變長字符串
RAW 可變長度的二進制或字節(jié)字符串的32,767個字節(jié)的最大尺寸,而不是由PL/ SQL解釋
NCHAR 具有32,767個字節(jié)的最大尺寸的固定長度國家字符串
NVARCHAR2 具有32,767個字節(jié)的最大尺寸可變長度國家字符串
LONG 具有32,760字節(jié)最大尺寸變長字符串
LONG RAW 可變長度的二進制或字節(jié)字符串的32,760字節(jié)的最大尺寸,而不是由PL/SQL解釋
ROWID 物理行標識符,一行在一個普通的表中的地址
UROWID 物理通用行標識符(物理,邏輯,或外國的行標識符)

PL/SQL布爾數(shù)據(jù)類型

在邏輯操作中使用布爾數(shù)據(jù)類型存儲的邏輯值。邏輯值為:true 和 false 的布爾值以及 NULL 值。

但是,SQL沒有數(shù)據(jù)類型等同于布爾。因此,布爾值不能用于:

  • SQL語句

  • 內(nèi)置SQL函數(shù)(如TO_CHAR)

  • 從SQL語句調(diào)用PL/ SQL函數(shù)

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

DATE數(shù)據(jù)類型存儲固定長度的日期時間,其中包括每天在幾秒鐘內(nèi)從午夜開始的時間。有效的日期范圍從公元前4712年1月1日至999912月31日。

默認的日期格式由Oracle初始化參數(shù)NLS_DATE_FORMAT設(shè)置。例如,默認的可以是“DD-MON-YY',它包括一個兩位數(shù)字的月份中的日期,月份名稱的縮寫,以及年的最后兩位數(shù)字,例如,01- OCT-12。

每個日期,包括世紀,年,月,日,時,分,秒。下表顯示了每個字段的有效值:

字段名稱 有效日期時間值 有效的間隔值
YEAR -4712 to 9999 (年除外 0) 任何非零整數(shù)
MONTH 01 to 12 0 to 11
DAY 01 to 31 (受制于年份和月份的數(shù)值,按日歷的區(qū)域設(shè)置的規(guī)則) 任何非零整數(shù)
HOUR 00 to 23 0 to 23
MINUTE 00 to 59 0 to 59
SECOND 00 to 59.9(n), 其中,9(n)是時間小數(shù)秒精度 0 to 59.9(n), 其中,9(n)是區(qū)間小數(shù)秒精度
TIMEZONE_HOUR -12 to 14 (范圍可容納夏令時更改) 不適用
TIMEZONE_MINUTE 00 to 59 不適用
TIMEZONE_REGION 在動態(tài)性能視圖找到V$TIMEZONE_NAMES 不適用
TIMEZONE_ABBR 在動態(tài)性能視圖找到V$TIMEZONE_NAMES 不適用

PL/SQL大對象(LOB)數(shù)據(jù)類型

大對象(LOB)數(shù)據(jù)類型是指大到數(shù)據(jù)項,例如文本,圖形圖像,視頻剪輯和聲音波形。 LOB數(shù)據(jù)類型允許高效的,隨機的,分段訪問這些數(shù)據(jù)。以下是預(yù)定義的PL/SQL LOB數(shù)據(jù)類型:

數(shù)據(jù)類型 描述 大小
BFILE 用于存儲大型二進制對象在操作數(shù)據(jù)庫之外的系統(tǒng)文件 依賴于系統(tǒng),不能超過4千兆字節(jié)(GB)
BLOB 用于存儲大型二進制對象在數(shù)據(jù)庫中 8到128兆兆字節(jié)(TB)的
CLOB 用于存儲字符大塊數(shù)據(jù)在數(shù)據(jù)庫中 8 - 128 TB
NCLOB 用于在數(shù)據(jù)庫中存儲大塊NCHAR數(shù)據(jù) 8 - 128 TB

PL/SQL用戶定義的子類型

子類型是另一種數(shù)據(jù)類型,這是所謂的基本類型的子集。 子類型具有其基本類型相同的操作,但其只是有效值的一個子集。

PL/SQL預(yù)定義了一些子類型的封裝標準。例如,PL/SQL預(yù)定義的子類型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提示符執(zhí)行時,它產(chǎn)生了以下結(jié)果:

Hello Reader Welcome to the World of PL/SQL

PL/SQL procedure successfully completed.

PL/SQL NULL

PL/SQL NULL值表示缺少或未知的數(shù)據(jù),蛤它不是一個整數(shù),字符,或任何其他特定的數(shù)據(jù)類型。需要注意的是NULL不是一樣的空數(shù)據(jù)串或空字符值'\0'。NULL可以被分配,但它不能與任何東西等同,包括其本身。