Как конвертировать SYS_GUID () в varchar? - PullRequest
15 голосов
/ 02 марта 2009

Как в oracle 10g преобразовать SYS_GUID () в varchar? Я пытаюсь что-то вроде:

select USER_GUID from user where email = 'user@example.com'

Возвращает байт RAW []. Можно ли использовать функцию для преобразования RAW в VARCHAR2 в операторе SQL?

Ответы [ 5 ]

19 голосов
/ 02 марта 2009

Не забудьте использовать HEXTORAW(varchar2) при сравнении этого значения со столбцами RAW.

Не существует неявной конвекции от VARCHAR2 до RAW. Это означает, что этот пункт:

WHERE raw_column = :varchar_value

будет преобразовано в:

WHERE RAWTOHEX(raw_column) = :varchar_value

, что делает индексы для raw_column непригодными для использования.

Использование:

WHERE raw_column = HEXTORAW(:varchar_value)

вместо.

4 голосов
/ 02 марта 2009

Использовать RAWTOHEX (USER_GUID).

2 голосов
/ 04 марта 2010
select RAWTOHEX(USER_GUID) from user where email = 'user@example.com'
1 голос
/ 02 марта 2009

Пожалуйста, не мод-1, если я не прав. Я собираюсь из памяти, так что это отказ от ответственности, чтобы проверить.

TO_CHAR на самом деле отличается между SQL и PL / SQL.

В SQL TO_CHAR не принимает сырье, как вы узнали.

В PL / SQL To_CHAR будет принимать необработанное значение.

Так что, если вы все равно находитесь в процедуре, иногда проще использовать переменную, но если вы просто используете SQL, перейдите к другим ответам здесь.

0 голосов
/ 27 августа 2018

select CAST (USER_GUID AS VARCHAR2(100)) from user where email = 'user@example.com'

...