PL/SQL 區塊的宣告部分主要用於定義變數與常數,其基本語法結構如下:
DECLARE
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr_or_value];
命名變數或常數時需遵循以下原則:
DECLARE
credit_limit CONSTANT NUMBER := 5000; -- 常數
invalid BOOLEAN := FALSE; -- 布林型變數
acct_id INTEGER(4) NOT NULL DEFAULT 9999; -- 必須附初值的變數
pi CONSTANT REAL := 3.14159; -- 浮點數常數
postal_code VARCHAR2(20); -- 等同 VARCHAR2(20 BYTE)
last_name VARCHAR2(20 CHAR); -- 字元語意長度
my_ename emp.ename%TYPE; -- 參照 emp 表 ename 欄位型態
PL/SQL 資料型態分為四大類:標量型、複合型、參照型、LOB 型。本文重點解析標量型態。
標量型態僅儲存單一值,細分為數值、字元、日期、布林等子類型。
範圍:-231 至 231-1 的整數。若指派浮點數會自動四捨五入。主要子型態:
注意:BINARY_INTEGER 及其子型態僅存在於 PL/SQL,無法用於 CREATE TABLE。
數值範圍同 BINARY_INTEGER,但行為差異:
同樣僅為 PL/SQL 型態。
NUMBER(p,s) 表示定點數,p(精度)1~38,s(小數位)-84~127。常見用法:
NUMBER(5,3):共 5 位,含 3 位小數NUMBER(5,5):5 位小數的浮點數NUMBER(4,5):小數點右側至少 1 個 0,總小數位 ≤5NUMBER(5,-2):從小數點左側第 2 位四捨五入ANSI/ISO 相容子型態:DEC、DECIMAL、NUMERIC(定點數)、DOUBLE PRECISION、FLOAT(約 38 位浮點數)、REAL(約 18 位浮點數)、INTEGER/INT/SMALLINT(38 位整數)。注意:NUMBER 同時為 PL/SQL 與 SQL 型態。
固定長度字元,語法 CHAR[(size [CHAR | BYTE])],預設 BYTE。最大 32767 位元組。若以 CHAR 語意,中文字最多 16383 字。注意:SQL 中 CHAR 最大 2000 位元組。
可變長度字元,必須指定長度,最大 32767。PL/SQL 依長度採不同儲存策略:<2000 位元組預先配置;≥2000 動態配置。子型態 STRING、VARCHAR 為別名,未來 VARCHAR 可能獨立,建議用 VARCHAR2。注意:SQL 中最大 4000 位元組。
LONG 最大 32760 位元組,Oracle 建議改用 CLOB;LONG RAW 同理建議改用 BLOB。SQL 中最大 231 位元組。
儲存二進位資料,最大 32767 位元組。SQL 中最大 2000 位元組。
邏輯值:TRUE、FALSE、NULL。不可用於 SQL。
ROWID 儲存實體列地址;UROWID 可同時儲存實體與邏輯(索引組織表)ROWID。新應用建議使用 UROWID。
範圍:西元前 4712-01-01 至西元 9999-12-31。若僅給年份/月份,預設為該年/月 1 日 00:00:00。
DECLARE
hiredate DATE;
BEGIN
hiredate := '01-2月-98';
hiredate := TO_DATE('2008','YYYY');
hiredate := TO_DATE('2008-03','YYYY-MM');
END;
可用 ALTER SESSION SET NLS_DATE_FORMAT 調整顯示格式。
DATE 的擴充,秒精度可達小數點後 9 位。語法 TIMESTAMP(precision)。
DECLARE
hiredate TIMESTAMP(4);
BEGIN
hiredate := '03-2月-98 07:08:43.23';
hiredate := TO_TIMESTAMP('15:12:02.020','HH24:MI:SS.FF');
END;
