首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle PL/SQL 入門基礎完整指南

     編輯:Oracle 資料庫相關知識

什麼是 PL/SQL?

PL/SQL(Procedural Language/SQL)是 Oracle 對標準 SQL 的程序化擴展,已深度整合於 Oracle 資料庫服務器及各類開發工具中。自 Oracle 6 版本起可靠支援,現已成為資料庫開發人員與 DBA 的核心技能。PL/SQL 並非獨立產品,而是內建於 Oracle 服務器的處理引擎:SQL 執行器負責單條 SQL 語句,而 PL/SQL 引擎則處理完整的程序區塊,並在其中委託 SQL 執行器處理嵌入的 SQL 語句。

PL/SQL 的核心優勢

  • 高效能交易處理:支援所有資料操作命令,可在任何 Oracle 環境運行。
  • 完整型別支援:涵蓋所有 SQL 資料型別、函數及 Oracle 物件型別。
  • 模組化與重用:程式區塊可命名、儲存於資料庫,供其他 PL/SQL 程式或 SQL 呼叫,所有 Client/Server 工具皆可存取。
  • 安全性管理:透過 Oracle 資料工具控制存取權限,可授予或撤銷使用者對程式的存取。
  • 跨平台便利:程式碼可用任何 ASCII 編輯器撰寫,適用於所有支援 Oracle 的作業系統。
  • 降低網路負載:以整個區塊傳送至服務器,避免逐條 SQL 傳輸造成的網路擁塞與服務器開銷。

PL/SQL 區塊結構

PL/SQL 採用區塊結構,每個區塊分為三個區段:

  1. 宣告區:以 DECLARE 開頭,定義變數、常數、游標及其資料型別與初始值(可選)。
  2. 執行區:以 BEGIN 開頭,放置所有可執行陳述式,包含 SQL、流程控制、巢狀區塊等(必須)。
  3. 例外處理區:以 EXCEPTION 開頭,處理執行期錯誤(可選)。

每個陳述式以分號結束;區塊以 END 結束;註解使用 --。

命名與匿名區塊

  • 匿名區塊:無名稱,可用於 Client 或 Server 端,無法儲存重用。
  • 命名區塊:包含 Function、Procedure、Package、Trigger 四種可儲存物件,編譯後存於資料庫,供所有連線應用程式呼叫。

變數與常數

宣告語法

變數名稱 資料型別 [NOT NULL] [:= 初始值];

NOT NULL 強制初始化。賦值方式:直接指定 := 或透過 SELECT ... INTO / FETCH ... INTO 從查詢結果賦值。

常數

以 CONSTANT 關鍵字宣告,值在定義時給定且不可變更。

標量資料型別

  • 數值型: NUMBER(p,s), BINARY_INTEGER, PLS_INTEGER 等
  • 字元型: VARCHAR2, CHAR, NCHAR, NVARCHAR2, LONG 等
  • 日期/時間: DATE, TIMESTAMP, INTERVAL 等
  • 布林型: BOOLEAN(僅 PL/SQL 可用,SQL 不支援)

LOB 大物件型別

用於儲存影像、聲音等大型資料(上限 4GB),支援隨機存取:

  • BFILE: 唯讀,儲於資料庫外部
  • BLOB: 二進位大物件
  • CLOB: 字元大物件
  • NCLOB: 國家字元集大物件

操作需使用 DBMS_LOB 套件。

運算子

  • 算術:+ - * /
  • 關係:= != > < >= <=
  • 比較:LIKE, BETWEEN, IN, IS NULL
  • 邏輯:AND, OR, NOT

流程控制結構

條件判斷

  • IF ... THEN ... END IF;
  • IF ... THEN ... ELSE ... END IF;
  • IF ... THEN ... ELSIF ... THEN ... ELSE ... END IF;

迴圈

  • 基本 LOOP: 搭配 EXIT 或 EXIT WHEN 跳出
  • WHILE LOOP: 先判斷條件再執行
  • FOR LOOP: 固定範圍迭代,計數器隱式宣告,可用 REVERSE 遞減

標籤與 GOTO

標籤格式 <<label_name>> 可標示區塊或迴圈,GOTO label_name; 可跳轉,但限制從外層跳入內層。

巢狀區塊

內層區塊可存取外層變數;同名變數以內層為準;外層不可直接存取內層變數。

執行 PL/SQL 區塊

  • SQL*Plus 中匿名區塊以 / 執行
  • 命名程式需用 EXECUTE(或 EXEC)呼叫;在另一 PL/SQL 區塊中呼叫則不需 EXECUTE

小結

掌握 PL/SQL 基礎語法、區塊結構、變數型別、流程控制與程式單元(Function/Procedure/Package/Trigger),即可開始編寫高效能的資料庫端應用邏輯,充分發揮 Oracle 資料庫的處理能力。

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