首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 系統變數函數速查:SYSDATE、USER、USERENV

     編輯:Oracle 資料庫基礎

常用系統變數函數

函數回傳值典型用途範例
SYSDATE資料庫伺服器當前日期時間(含秒)預設值、時間篩選、審計欄位WHERE created_dt BETWEEN SYSDATE-30 AND SYSDATE
SYSTIMESTAMP含時區與毫秒的時間戳記高精度計時、跨時區應用SELECT SYSTIMESTAMP FROM dual
CURRENT_DATESession 時區的當前日期用戶本地時間顯示ALTER SESSION SET TIME_ZONE='Asia/Taipei'
CURRENT_TIMESTAMPSession 時區的當前時間戳記同上,含毫秒
USER當前登入 Schema 名稱權限檢查、動態 SQLSELECT USER FROM dual
UID當前用戶 ID(數值)同上
USERENV(parameter)Session 環境資訊稽核、診斷、條件邏輯見下表

USERENV 參數速查

參數說明範例回傳
SESSIONIDSession 唯一識別碼123456
ENTRYID審計項目序號789
ISDBA是否具 DBA 權限TRUE/FALSE
CLIENT_INFO用戶自訂資訊(DBMS_APPLICATION_INFO.SET_CLIENT_INFO)BatchJob_202401
MODULE模組名稱(SET_MODULE)OrderEntry
ACTION動作名稱(SET_ACTION)InsertOrder
LANGUAGE語言與字元集AMERICAN_AMERICA.AL32UTF8
TERMINAL客戶端終端機名稱WORKSTATION01
IP_ADDRESS客戶端 IP(需啟用 SQL*Net 追蹤)192.168.1.50
HOST資料庫主機名db-server-01
INSTANCEInstance 名稱ORCL

實用範例

1. 最近 30 天銷售查詢

SELECT * FROM sales
WHERE sale_date BETWEEN TRUNC(SYSDATE) - 30 AND TRUNC(SYSDATE);

2. 審計觸發器記錄用戶與程式

CREATE OR REPLACE TRIGGER trg_sales_audit
BEFORE INSERT ON sales
FOR EACH ROW
BEGIN
  :NEW.created_by := USER;
  :NEW.created_at := SYSDATE;
  :NEW.client_ip  := USERENV('IP_ADDRESS');
  :NEW.module     := USERENV('MODULE');
END;
/

3. 設定應用程式上下文(便於 USERENV 讀取)

EXEC DBMS_APPLICATION_INFO.SET_MODULE('OrderSys', 'CreateOrder');
EXEC DBMS_APPLICATION_INFO.SET_CLIENT_INFO('Batch_20240115');
EXEC DBMS_APPLICATION_INFO.SET_ACTION('ValidatePayment');

注意事項

  • SYSDATE 回傳 DATE 型別(精度到秒);需毫秒請用 SYSTIMESTAMP 或 CURRENT_TIMESTAMP。
  • USERENV 在 12c 後部分參數改用 SYS_CONTEXT('USERENV', 'param'),建議改用新語法:
    SYS_CONTEXT('USERENV', 'SESSION_USER') 等同 USER。
  • 觸發器、View、函數中引用 SYSDATE 會在「陳述式執行時」取值,同一陳述式內多次引用值相同。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved