ITPub博客

首页 > 数据库 > Oracle > [20250410]GUID转换GUID_BASE64(补充4).txt

[20250410]GUID转换GUID_BASE64(补充4).txt

原创 Oracle 作者:lfree 时间:2025-04-10 20:00:18 0 删除 编辑

[20250410]GUID转换GUID_BASE64(补充4).txt

--//昨天重新写bash shell脚本,总感觉遗漏了什么,oracle内部应该有对应函数转换GUID_BASE64。
--//看了相关文档,发现使用UTL_ENCODE.BASE64_ENCODE函数,测试看看。

1.环境:
SCOTT@book01p> @ver2
==============================
PORT_STRING                   : x86_64/Linux 2.4.xx
VERSION                       : 21.0.0.0.0
BANNER                        : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL                   : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY                 : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID                        : 0
PL/SQL procedure successfully completed.

2.测试:
--//21c下:
SYS@book> select CON_ID,DBID,CON_UID,NAME,GUID,GUID_BASE64 from V$CONTAINERs;
CON_ID       DBID    CON_UID NAME     GUID                             GUID_BASE64
------ ---------- ---------- -------- -------------------------------- ------------------------
     1 1617337831          1 CDB$ROOT C8209F27C6B16005E053362EE80AE60E yCCfJ8axYAXgUzYu6ArmDgA=
     2 2763294012 2763294012 PDB$SEED 1F36DBBBA2C8169BE0636538A8C04D12 Hzbbu6LIFpvgY2U4qMBNEgA=
     3 1073777561 1073777561 BOOK01P  1F36F47256D41C08E0636538A8C03260 Hzb0clbUHAjgY2U4qMAyYAA=

SCOTT@book01p> SELECT UTL_RAW.CAST_TO_varchar2(UTL_ENCODE.BASE64_ENCODE('1F36F47256D41C08E0636538A8C0326000')) c30 FROM dual;
C30
------------------------------
Hzb0clbUHAjgY2U4qMAyYAA=
--//现在明白当时为什么不行,当时UTL_ENCODE.BASE64_ENCODE的输出是raw类型,要转换成字符串类型,结果就对了。
--//我在结尾补了2个00,不然还是结尾对不上。就是21c改变算法,加入两个0在做运算。

--//18c的情况:
SYS@192.168.x.y:1521/orclcdb>  select CON_ID,DBID,CON_UID,NAME,GUID,GUID_BASE64 from V$CONTAINERs;
CON_ID       DBID    CON_UID NAME     GUID                             GUID_BASE64
------ ---------- ---------- -------- -------------------------------- ------------------------
     1 2756091850          1 CDB$ROOT 64A52F53A7683286E053CDA9E80AED76 ZKUvU6doMobgU82p6Artdg==
     2 1474312904 1474312904 PDB$SEED 742DCFA2CE044FDEE0558253DD747177 dC3Pos4ET97gVYJT3XRxdw==
     3  115310104  115310104 ORCL     74A69DC145F5662BE0558253DD747177 dKadwUX1ZivgVYJT3XRxdw==

SCOTT@book01p> SELECT UTL_RAW.CAST_TO_varchar2(UTL_ENCODE.BASE64_ENCODE('74A69DC145F5662BE0558253DD747177')) c30 FROM dual;
C30
------------------------------
dKadwUX1ZivgVYJT3XRxdw==

--//完全对上。
--//反过来使用UTL_ENCODE.BASE64_DECODE解码。不过也需要将字符串变成raw类型再计算。

SCOTT@book01p> SELECT UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW('dKadwUX1ZivgVYJT3XRxdw==')) c40 FROM dual;
C40
----------------------------------------
74A69DC145F5662BE0558253DD747177


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3080603/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969925