如何将SYS_GUID()转换为varchar?

16
在Oracle 10g中,如何将SYS_GUID()转换为varchar?我正在尝试类似以下的内容:
select USER_GUID from user where email = 'user@example.com'

这个函数返回原始的byte[]字节数组。在SQL语句中是否有可能使用一个函数将RAW转换为VARCHAR2?

5个回答

23

在比较此值与 RAW 列时,请不要忘记使用 HEXTORAW(varchar2)

VARCHAR2RAW 不具有隐式转换关系。这意味着该语句:

WHERE raw_column = :varchar_value

将被隐式转换为:

WHERE RAWTOHEX(raw_column) = :varchar_value

因此,对raw_column进行索引变得无法使用。

应该使用:

WHERE raw_column = HEXTORAW(:varchar_value)

改为使用 "instead"。


5

使用RAWTOHEX(USER_GUID)函数。


4
select RAWTOHEX(USER_GUID) from user where email = 'user@example.com'

1
请勿在我错误时进行mod-1。我正在从记忆中获取信息,因此这是一个免责声明以进行验证。
TO_CHAR实际上在SQL和PL/SQL之间有所不同。
在SQL中,TO_CHAR不接受原始值,正如您已经发现的那样。
在PL/SQL中,To_CHAR将接受原始值。
因此,如果您已经在过程中,有时使用变量会更容易,但如果只是使用SQL,请使用其他答案。

2
PL/SQL的TO_CHAR()实际上是SYS.STANDARD.TO_CHAR(),你也可以在SQL中使用它:SELECT SYS.STANDARD.TO_CHAR(SYS_GUID()) FROM dual。当然,这意味着SQL/PLSQL上下文切换和适当的性能影响。 - Quassnoi
1
哇,太酷了。我从未像那样将其置于上下文中。mod+1.1 - Mark Brady

0

从用户表中查询Email为'user@example.com'的用户的USER_GUID,并将其转换成长度为100的VARCHAR2类型


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接