Как преобразовать SYS_GUID() в varchar?
Вопрос
Как в oracle 10g преобразовать SYS_GUID() в varchar?Я пытаюсь что-то вроде:
select USER_GUID from user where email = 'user@example.com'
Возвращает байт RAW[].Можно ли использовать функцию для преобразования RAW в VARCHAR2 в инструкции SQL?
Решение
Не забудьте использовать HEXTORAW(varchar2)
при сравнении этого значения с RAW
столбцы.
Неявного преобразования из VARCHAR2
к RAW
.Это означает, что этот пункт:
WHERE raw_column = :varchar_value
будет неявно преобразовано в:
WHERE RAWTOHEX(raw_column) = :varchar_value
, таким образом создавая индексы на raw_column
непригодный.
Использовать:
WHERE raw_column = HEXTORAW(:varchar_value)
вместо.
Другие советы
Используйте RAWTOHEX(USER_GUID).
select RAWTOHEX(USER_GUID) from user where email = 'user@example.com'
Пожалуйста, не мод-1, если я ошибаюсь.Я исхожу из памяти, так что это заявление об отказе от ответственности, которое нужно проверить.
TO_CHAR на самом деле различается между SQL и PL/SQL.
Как вы узнали, в SQL TO_CHAR не принимает необработанные данные.
В PL/SQL To_CHAR принимает необработанное значение.
Так что, если вы все равно находитесь в процедуре, иногда проще использовать переменную, но если вы просто используете SQL, перейдите к другим ответам здесь.
select CAST (USER_GUID AS VARCHAR2(100)) from user where email = 'user@example.com'