本文為「Oracle 全攻略」系列之程式物件篇,涵蓋 PL/SQL 核心物件建立、管理、除錯、效能調優與最佳實踐。以下為知識脈絡摘要,建議搭配原文圖示閱讀。
| 物件類型 | 核心用途 | 關鍵特性 |
|---|---|---|
| Procedure | 執行業務邏輯、批次作業 | 無返回值、支援 IN/OUT/IN OUT 參數、可提交/回滾 |
| Function | 計算並返回值,可用於 SQL | 必須 RETURN、不可含 DDL、確定性函數可快取 |
| Trigger | 事件驅動自動執行 | DML/DB/INSTEAD OF、行級/語句級、BEFORE/AFTER、:OLD/:NEW |
| Package | 封裝相關程式元素 | Specification/Body 分離、狀態保持 (Session 級)、過載、私有/公有 |
| Job (DBMS_SCHEDULER) | 排程自動化執行 | Calendar/Event 驅動、鏈式作業、資源管理、遠程外部作業 |
| Database Link | 跨資料庫查詢/異動 | Public/Private、Fixed User/Current User、分散式交易、雙階段提交 |
IN (預設, 唯讀)、OUT (唯寫, 需初始化)、IN OUT (讀寫)。CREATE PROCEDURE p (x NUMBER DEFAULT 1)。PLSQL_OPTIMIZE_LEVEL、PLSQL_CODE_TYPE (NATIVE/INTERPRETED)、PLSQL_WARNINGS。RESULT_CACHE 子句 (11g+) 緩存確定性函數結果。BEFORE/AFTER INSERT/UPDATE/DELETE ON table,FOR EACH ROW (行級) 可存取 :OLD/:NEW。AFTER LOGON/STARTUP/DDL ON DATABASE/SCHEMA,審計、同步、安全控制。ORA-04091 變更表問題。PRAGMA SERIALLY_REUSABLE 釋放 Package 狀態於呼叫結束時 (適用無狀態工具包)。QUEUE_SPEC 監聽 AQ 事件觸發作業。DEFINE_CHAIN_STEP、DEFINE_CHAIN_RULE 實現複雜工作流。EXTERNAL_SCRIPT 在遠端主機執行 Shell/Python 腳本。CREATE DATABASE LINK dblink CONNECT TO user IDENTIFIED BY pwd USING 'tns_alias'。SELECT * FROM table@dblink,最佳化器可推演執行計畫 (DRIVING_SITE Hint)。COMMIT 觸發 Prepare/Commit 階段。ORA-02019 (連線描述缺失)、ORA-12154 (TNS 解析失敗)、ORA-02068 (嚴重錯誤需回滾)。原文包含 15 張圖示,涵蓋建立語法範例、編譯流程、Package 結構、Scheduler 架構、DB Link 拓撲、除錯工具使用:
LOGGING_LEVEL=FULL) 並設定失敗通知。CURRENT_USER 模式配合 Proxy Authentication,避免硬編碼密碼。