You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 19c如何按需生成基于命名空间和用户名的UUID v3/v5

Oracle 19c 按需即时生成UUID v3/v5实现方案

Oracle 19c没有内置支持「命名空间+自定义名称」生成UUID v3/v5的原生函数,我们可以通过自定义PL/SQL函数实现,生成过程完全是即时计算,不会持久化存储生成结果,符合你的需求。

前置准备

  • 首先需要给你的业务数据库账号授予加密包调用权限,用DBA账号执行以下授权语句:
GRANT EXECUTE ON SYS.DBMS_CRYPTO TO 你的业务账号;
  • 提前确定你要使用的固定命名空间UUID:UUID v3/v5要求命名空间本身是合法UUID,你可以用官方预定义的公共命名空间,也可以将你的常量字符串Name space生成一个固定UUID作为业务专属命名空间,保证所有生成的UUID都基于同一个根命名空间即可。示例中我们使用927aac70-390b-4d18-9259-250c3afd3b57作为对应Name space的固定UUID,你可以自行替换为你需要的值。

实现自定义UUID生成函数

方案1:生成UUID v5(推荐,基于SHA1加密,安全性更高)

CREATE OR REPLACE FUNCTION uuid_v5(p_namespace_uuid IN VARCHAR2, p_name IN VARCHAR2)
RETURN VARCHAR2
IS
    v_raw_namespace RAW(16);
    v_raw_name RAW(2000);
    v_hash RAW(20);
    v_hex VARCHAR2(36);
BEGIN
    -- 将命名空间UUID转换为RAW格式
    v_raw_namespace := HEXTORAW(REPLACE(p_namespace_uuid, '-', ''));
    -- 拼接命名空间和名称后计算SHA1哈希
    v_raw_name := UTL_I18N.STRING_TO_RAW(p_name, 'AL32UTF8');
    v_hash := DBMS_CRYPTO.HASH(UTL_RAW.CONCAT(v_raw_namespace, v_raw_name), DBMS_CRYPTO.HASH_SH1);
    
    -- 设置UUID版本为5(第13位字符改为5)
    v_hash := UTL_RAW.SUBSTR(v_hash, 1, 6) || '5' || UTL_RAW.SUBSTR(v_hash, 7, 10);
    -- 设置UUID变体为RFC4122(第17位字符改为8)
    v_hash := UTL_RAW.SUBSTR(v_hash, 1, 8) || '8' || UTL_RAW.SUBSTR(v_hash, 9, 11);
    
    -- 格式化为带横杠的标准UUID格式
    v_hex := LOWER(
        SUBSTR(v_hash, 1, 8) || '-' ||
        SUBSTR(v_hash, 9, 4) || '-' ||
        SUBSTR(v_hash, 13, 4) || '-' ||
        SUBSTR(v_hash, 17, 4) || '-' ||
        SUBSTR(v_hash, 21, 12)
    );
    RETURN v_hex;
END;
/

方案2:生成UUID v3(基于MD5加密)

如果需要使用v3版本,仅需要把上述函数中的哈希算法替换为DBMS_CRYPTO.HASH_MD5,同步调整对应哈希参数的长度即可,核心逻辑完全一致。

调用方式

函数创建完成后就可以直接按照你期望的语法调用,替换为你自己的命名空间UUID即可:

SELECT uuid_v5('927aac70-390b-4d18-9259-250c3afd3b57', a.username) uuid  
FROM USER_TABLE a 
where a.username = 'username';

特性说明

  • 生成过程完全是即时计算,不会写入数据库任何表,完全满足你按需生成的需求
  • 同一个命名空间+同一个用户名生成的UUID固定不变,符合UUID v3/v5的标准特性

内容的提问来源于stack exchange,提问作者koa73

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:54:03