كيف يمكنك تحويل SYS_GUID () لVARCHAR؟
سؤال
في أوراكل 10g، كيف يمكن تحويل SYS_GUID () لVARCHAR؟ أحاول شيئا مثل:
select USER_GUID from user where email = 'user@example.com'
والتي ترجع بايت RAW []. هل من الممكن استخدام وظيفة لتحويل RAW إلى VARCHAR2 في بيان SQL؟
المحلول
لا تنس أن تستخدم HEXTORAW(varchar2)
عند مقارنة هذه القيمة إلى الأعمدة RAW
.
وليس هناك convesion ضمني من VARCHAR2
إلى RAW
. وهذا يعني أن هذا الشرط:
WHERE raw_column = :varchar_value
وسيتم تحويل impicitly إلى:
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'