USERENV 函數回傳會話資訊(用戶 ID、語言、DBA 權限等),Oracle 8i 引入 SYS_CONTEXT 取代並增強:不僅回傳 USERENV 資料,更能回傳應用程式自訂資料值。
包含一組名稱(屬性)與對應值,可被 SYS_CONTEXT 存取。例:人事應用回傳用戶部門號:
v_dept := SYS_CONTEXT('HR_CONTEXT', 'DEPT');
用戶成功登入後觸發,在指定套件執行預存程序查詢資料,透過 DBMS_SESSION.SET_CONTEXT 寫入上下文。
1. 安全套件 HR_CONTEXT_PKG:查詢當前用戶會話關聯部門,初始化 HR_CONTEXT。
2. 建立命名空間關聯套件:
CREATE CONTEXT hr_context USING HR.HR_CONTEXT_PKG;
3. 登入觸發器:
CREATE OR REPLACE TRIGGER dbt_logon
AFTER LOGON ON DATABASE
BEGIN
HR.HR_CONTEXT_PKG.INITIALIZE_HR_CONTEXT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
定位部門失敗時不阻擋登入(無部門用戶仍可登入)。
SELECT SYS_CONTEXT('HR_CONTEXT', 'DEPT') FROM DUAL;
即時回傳當前用戶部門 ID,無需多次邏輯讀查表。