首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

PL/SQL 宣告區塊詳解:標量資料型態完全指南

     編輯:Oracle 資料庫基礎

PL/SQL 宣告區塊基礎語法

PL/SQL 區塊的宣告部分主要用於定義變數與常數,其基本語法結構如下:

DECLARE
  variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr_or_value];

命名規範

命名變數或常數時需遵循以下原則:

  • 首字元必須為字母,後續可包含底線(_)、$、# 及數字
  • 長度限制為 1 至 30 個字元
  • 不區分大小寫
  • 不可使用系統保留關鍵字

關鍵字說明

  • CONSTANT:定義常數,宣告時必須給予初始值,且後續無法修改
  • datatype:指定 PL/SQL 資料型態(非 SQL 資料型態)
  • NOT NULL:限制變數/常數不可為 NULL,宣告時必須提供非 NULL 初始值

宣告範例

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 四大資料型態分類

PL/SQL 資料型態分為四大類:標量型、複合型、參照型、LOB 型。本文重點解析標量型態。

一、標量型態

標量型態僅儲存單一值,細分為數值、字元、日期、布林等子類型。

1. BINARY_INTEGER

範圍:-231 至 231-1 的整數。若指派浮點數會自動四捨五入。主要子型態:

  • NATURAL:0 至 231-1
  • POSITIVE:1 至 231-1
  • NATURALN / POSITIVEN:不允許 NULL 的 NATURAL/POSITIVE
  • SIGNTYPE:僅允許 -1、0、1 三值

注意:BINARY_INTEGER 及其子型態僅存在於 PL/SQL,無法用於 CREATE TABLE。

2. PLS_INTEGER

數值範圍同 BINARY_INTEGER,但行為差異:

  • 運算溢出時會拋出例外(BINARY_INTEGER 會自動轉為 NUMBER)
  • 執行速度較 BINARY_INTEGER 快

同樣僅為 PL/SQL 型態。

3. NUMBER 及其子型態

NUMBER(p,s) 表示定點數,p(精度)1~38,s(小數位)-84~127。常見用法:

  • NUMBER(5,3):共 5 位,含 3 位小數
  • NUMBER(5,5):5 位小數的浮點數
  • NUMBER(4,5):小數點右側至少 1 個 0,總小數位 ≤5
  • NUMBER(5,-2):從小數點左側第 2 位四捨五入

ANSI/ISO 相容子型態:DEC、DECIMAL、NUMERIC(定點數)、DOUBLE PRECISION、FLOAT(約 38 位浮點數)、REAL(約 18 位浮點數)、INTEGER/INT/SMALLINT(38 位整數)。注意:NUMBER 同時為 PL/SQL 與 SQL 型態。

4. CHAR / CHARACTER

固定長度字元,語法 CHAR[(size [CHAR | BYTE])],預設 BYTE。最大 32767 位元組。若以 CHAR 語意,中文字最多 16383 字。注意:SQL 中 CHAR 最大 2000 位元組。

5. VARCHAR2

可變長度字元,必須指定長度,最大 32767。PL/SQL 依長度採不同儲存策略:<2000 位元組預先配置;≥2000 動態配置。子型態 STRING、VARCHAR 為別名,未來 VARCHAR 可能獨立,建議用 VARCHAR2。注意:SQL 中最大 4000 位元組。

6. LONG / LONG RAW

LONG 最大 32760 位元組,Oracle 建議改用 CLOB;LONG RAW 同理建議改用 BLOB。SQL 中最大 231 位元組。

7. RAW

儲存二進位資料,最大 32767 位元組。SQL 中最大 2000 位元組。

8. BOOLEAN

邏輯值:TRUE、FALSE、NULL。不可用於 SQL。

9. ROWID / UROWID

ROWID 儲存實體列地址;UROWID 可同時儲存實體與邏輯(索引組織表)ROWID。新應用建議使用 UROWID。

10. 日期時間型態

DATE

範圍:西元前 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 調整顯示格式。

TIMESTAMP

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;

PL/SQL 與 SQL 資料型態長度對照表

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved