PL/SQL 引擎整合(9i 起)
- 9i 前:SQL 引擎與 PL/SQL 引擎分離,上下文切換開銷大。
- 9i 起:一體化解析器與執行引擎,消除切換,效能顯著提升。
10g 進一步強化
- 新編譯器:優化程式碼生成、減少指令數。
- 減少 SQL 中呼叫 PL/SQL 的開銷(內聯優化)。
- 官方數據:10g PL/SQL 效能較 9i **提升 50%-75%**。
- 新除錯能力:
PLSQL_WARNINGS 參數控制編譯警告。
PLSQL_WARNINGS 參數詳解
ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:SEVERE';
ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:SEVERE', 'DISABLE:INFORMATIONAL';
ALTER SESSION SET PLSQL_WARNINGS = 'ENABLE:(6000,6010)'; -- 按錯誤碼
ALTER SYSTEM SET PLSQL_WARNINGS = 'ENABLE:PERFORMANCE';
ALTER SESSION SET PLSQL_WARNINGS = 'DISABLE:ALL';
三類警告等級
| 等級 | 含義 |
| SEVERE | 嚴重邏輯錯誤(如無限迴圈、未處理例外) |
| PERFORMANCE | 效能隱憂(如隱性轉換、未使用索引) |
| INFORMATIONAL | 資訊性提示(如未使用變數、舊語法) |
三種控制動作
ENABLE:開啟指定等級/錯誤碼警告。
DISABLE:關閉指定等級/錯誤碼警告。
ERROR:將指定警告視為錯誤(編譯失敗),強制開發者修正。
實務建議
- 開發環境:
PLSQL_WARNINGS='ENABLE:ALL',CI 流程中視警告為錯誤(ERROR:ALL)。
- 生產環境:
PLSQL_WARNINGS='DISABLE:ALL' 或僅啟用 SEVERE,避免編譯噪音。
- 遷移 10g 時:重新編譯所有無效物件(
UTLRP.SQL),享受新編譯器優化。