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

Oracle 登入觸發器初始化用戶會話上下文:SYS_CONTEXT 取代 USERENV 的最佳實踐

     編輯:Oracle 資料庫相關知識

Oracle 8i 引入 SYS_CONTEXT 取代舊有 USERENV 函數,不僅能回傳 Session 資訊 (SID、語言、DBA 權限),更支援**應用程式定義的上下文屬性-值對**,儲存在 SGA 中,存取極快且安全。

核心架構

  1. 建立上下文命名空間:
    CREATE CONTEXT hr_context USING hr.hr_context_pkg;
  2. 撰寫 PL/SQL 套件初始化屬性 (列表 A):
    查詢當前用戶所屬部門 → DBMS_SESSION.SET_CONTEXT('HR_CONTEXT','DEPT', v_dept);
  3. 建立 AFTER LOGON 資料庫觸發器:
    CREATE OR REPLACE TRIGGER dbt_logon AFTER LOGON ON DATABASE BEGIN hr.hr_context_pkg.initialize_hr_context; EXCEPTION WHEN OTHERS THEN NULL; END;

三大優勢

  • 效能:上下文資料在 SGA,避免重複磁碟 I/O。
  • 安全:單一 PL/SQL 套件封裝邏輯,觸發器僅呼叫該套件,防止隨意竄改。
  • 彈性:可建立任意數量上下文,每個含無限屬性-值對。

應用程式存取

SELECT SYS_CONTEXT('HR_CONTEXT','DEPT') FROM DUAL;

即可取得當前用戶部門 ID,無需自行查表。

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