【问题标题】:ORACLE RAW in string format to Standard GUID字符串格式的 ORACLE RAW 到标准 GUID
【发布时间】:2016-06-07 16:33:23
【问题描述】:

我正在尝试寻找将Oracle RAW GUID 格式为String 的解决方案转换为标准GUID 格式。我无法为我的用例找到解决方案。这是我正在寻找的示例:

ORACLE RAW (String): 9BB2A2B8DF8747B0982F2F1702E1D18B 

这需要使用 Java 代码转换为标准或括号中的 GUID,即

B8A2B29B-87DF-B047-982F-2F1702E1D18B or {B8A2B29B-87DF-B047-982F-2F1702E1D18B} 

提前感谢您的帮助。

【问题讨论】:

标签: java oracle


【解决方案1】:

一种简单的方法是在您选择 RAW GUID 时将其转换为 VARCHAR。然后从结果集中将其作为字符串读取。这是公式:

select 
 upper(
    regexp_replace(
        regexp_replace(
            hextoraw('9BB2A2B8DF8747B0982F2F1702E1D18B'),
            '(.{8})(.{4})(.{4})(.{4})(.{12})',
            '\1-\2-\3-\4-\5'
        ),
        '(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})',
        '\4\3\2\1-\6\5-\8\7\9'
    )
 ) from dual

这是我找到查询的参考(我必须调整它,因为原始有一些错误):https://community.oracle.com/thread/1063096?tstart=0

或者如果你想用 Java 来做,那么用 Java 翻译上述解决方案非常简单:

/**
 * input: "9BB2A2B8DF8747B0982F2F1702E1D18B"
 * output: "B8A2B29B-87DF-B047-982F-2F1702E1D18B";
 */
public String hexToStr(String guid) {       
    return guid.replaceAll("(.{8})(.{4})(.{4})(.{4})(.{12})", "$1-$2-$3-$4-$5").replaceAll("(.{2})(.{2})(.{2})(.{2}).(.{2})(.{2}).(.{2})(.{2})(.{18})", "$4$3$2$1-$6$5-$8$7$9");
}

由于SYS_GUID() 的 Oracle 实现不符合 RFC 4122,因此无法使用更标准的方式使用 java.util.UUID 类。请参阅 Is Oracle's SYS_GUID() UUID RFC 4122 compliant?

【讨论】:

【解决方案2】:

我编写了一个控制台应用程序来进行这种转换。这很有用,因为我每天需要多次这样做。

需要编译并定义路径上的输出目录。

https://github.com/lucassc/oracleuuid.

【讨论】:

猜你喜欢
  • 2021-10-23
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-08
  • 2013-12-14
  • 1970-01-01
  • 2022-01-02
相关资源
最近更新 更多