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

Oracle DBMS_RANDOM.STRING 產生隨機字串完整參數與範例

     編輯:Oracle 資料庫相關知識

DBMS_RANDOM.STRING 是 Oracle 內建產生隨機字串的函數,支援大寫、小寫、混合、英數、可列印字元五種模式,常用於測試資料生成、臨時密碼、Token、檔案命名等場景。

函數語法

DBMS_RANDOM.STRING(opt CHAR, len NUMBER) RETURN VARCHAR2

參數 opt 選項對照表

opt全稱字元集範例輸出 (len=10)
'U' / 'u'UppercaseA-ZXKQZJHFRPT
'L' / 'l'Lowercasea-zxkqzjhfrpt
'A' / 'a'Mixed case (Alpha)a-z, A-ZaXkQzJhFrP
'X' / 'x'Uppercase Alpha-NumericA-Z, 0-9XK7QZ9JHF2
'P' / 'p'Printable (任何可列印)ASCII 33-126Xk#7Qz$9Jh

實戰範例

-- 1. 20 碼大寫隨機碼 (適合驗證碼、批次號)
SELECT DBMS_RANDOM.STRING('U', 20) FROM DUAL;

-- 2. 20 碼小寫隨機碼
SELECT DBMS_RANDOM.STRING('L', 20) FROM DUAL;

-- 3. 20 碼大小寫混合 (適合臨時密碼)
SELECT DBMS_RANDOM.STRING('A', 20) FROM DUAL;

-- 4. 20 碼大寫英數 (適合序列號、兌換碼)
SELECT DBMS_RANDOM.STRING('X', 20) FROM DUAL;

-- 5. 20 碼可列印字元 (含特殊符號,適合高強度密碼)
SELECT DBMS_RANDOM.STRING('P', 20) FROM DUAL;

進階應用:批次產生測試資料

-- 產生 1000 筆測試用戶:帳號 user_隨機8碼、密碼 隨機12碼英數
INSERT INTO test_users (username, password, created_dt)
SELECT 'user_' || DBMS_RANDOM.STRING('X', 8),
       DBMS_RANDOM.STRING('X', 12),
       SYSDATE
FROM DUAL
CONNECT BY LEVEL <= 1000;

注意事項

  • 非加密安全:DBMS_RANDOM 為偽隨機數產生器,**不可用於加密金鑰、Session Token 等安全敏感場景**,請改用 DBMS_CRYPTO.RANDOMBYTES
  • 每次呼叫獨立,無種子控制,無法重現序列
  • 長度 len 最大 2000 (VARCHAR2 上限)
  • 12c+ 可搭配 DBMS_RANDOM.RANDOM 產生整數隨機數

對比:DBMS_RANDOM vs DBMS_CRYPTO

特性DBMS_RANDOM.STRINGDBMS_CRYPTO.RANDOMBYTES + RAWTOHEX
用途測試資料、非安全隨機碼加密金鑰、Session ID、CSRF Token
隨機性偽隨機 (線性同餘法)加密安全隨機 (OS entropy pool)
效能極快較慢
輸出格式直接 VARCHAR2RAW → 需轉換
選型原則:「測試用 DBMS_RANDOM,安全用 DBMS_CRYPTO。」切勿混淆。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved