Oracle
 sql >> Database >  >> RDS >> Oracle

Numero Oracle e varchar join

Uno dei motivi per cui le conversioni implicite falliscono è quando la colonna varchar di unione contiene dati che non sono numerici. Oracle gestisce i join da numero a varchar2 convertendo le stringhe (controlla la citazione di Gary nel suo commento), quindi esegue effettivamente questo:

select a.col1, b.somecol 
from tableA a inner join tableB b on to_number(b.col2)=a.col1;

Se tableB.col2 contiene valori che non sono numerici - sembra abbastanza probabile, dopotutto è una stringa - allora lancerà ORA-01722: invalid number . Castando in modo esplicito la colonna del numero su una stringa, si cortocircuita il comportamento predefinito di Oracle.

Il fatto che non si verifichi questo problema nei primi due ambienti è una questione di fortuna, non di configurazione. Potrebbe colpire in qualsiasi momento, perché richiede solo una stringa non numerica per interrompere la query. Quindi dovresti davvero eseguire con la conversione esplicita in tutti gli ambienti.

Per quanto riguarda le prestazioni, potresti creare un indice basato su funzioni ...

create index whatever_idx on tableA ( to_char(col1) )
/