2009-03-02 13 views

risposta

17

Non dimenticare di utilizzare HEXTORAW(varchar2) quando si confronta questo valore con le colonne RAW.

Nessuna convinzione implicita da VARCHAR2 a RAW. Ciò significa che tale clausola:

WHERE raw_column = :varchar_value 

verrà impicitly convertito in:

WHERE RAWTOHEX(raw_column) = :varchar_value 

, rendendo così indici su raw_column inutilizzabile.

Usa:

WHERE raw_column = HEXTORAW(:varchar_value) 

invece.

4

Utilizzare RAWTOHEX (USER_GUID).

1

Si prega di non mod-1 se ho torto. Vado dalla memoria quindi questo è un disclaimer da verificare.

TO_CHAR è in realtà diverso tra SQL e PL/SQL.

In SQL TO_CHAR non prende un raw come hai scoperto.

In PL/SQL To_CHAR assume un valore non elaborato.

Quindi se sei in una procedura comunque, a volte è più facile usare una variabile, ma se stai usando solo SQL, vai con le altre risposte qui.

+2

PL/SQL di TO_CHAR() è infatti SYS.STANDARD.TO_CHAR(), che è possibile utilizzare in SQL troppo: SELECT SYS.STANDARD.TO_CHAR (SYS_GUID()) FROM dual. Ovviamente ciò implica il cambio di contesto SQL/PLSQL e l'impatto sulle prestazioni appropriato. – Quassnoi

+0

OMG, è fantastico. Non l'ho mai contestualizzato così. mod + 1.1 –

Problemi correlati