Come si converte SYS_GUID () in varchar?
Domanda
In Oracle 10g, come si converte SYS_GUID () in varchar? Sto provando qualcosa del tipo:
select USER_GUID from user where email = 'user@example.com'
Che restituisce il byte RAW []. È possibile utilizzare una funzione per convertire RAW in VARCHAR2 nell'istruzione SQL?
Soluzione
Non dimenticare di usare HEXTORAW (varchar2)
quando si confronta questo valore con le colonne RAW
.
Non vi è alcuna conversione implicita da VARCHAR2
a RAW
. Ciò significa che questa clausola:
WHERE raw_column = :varchar_value
verrà convertito in modo impiccio in:
WHERE RAWTOHEX(raw_column) = :varchar_value
, rendendo così inutilizzabili gli indici su raw_column
.
Usa:
WHERE raw_column = HEXTORAW(:varchar_value)
, invece.
Altri suggerimenti
Usa RAWTOHEX (USER_GUID).
select RAWTOHEX(USER_GUID) from user where email = 'user@example.com'
Per favore, non mod-1 se sbaglio. Vado dalla memoria, quindi questo è un disclaimer da verificare.
TO_CHAR è in realtà diverso tra SQL e PL / SQL.
In SQL TO_CHAR non accetta un raw come hai scoperto.
In PL / SQL To_CHAR avrà un valore non elaborato.
Quindi, se stai comunque eseguendo una procedura, a volte è più facile usare una variabile, ma se stai usando solo SQL, vai con le altre risposte qui.
seleziona CAST (USER_GUID AS VARCHAR2 (100)) dall'utente dove email = 'user@example.com'