[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/ ,如需转载,请注明出处,否则将追究法律责任。