sql >> Base de Datos >  >> RDS >> Oracle

Unión de número de Oracle y varchar

Una de las razones por las que fallan las conversiones implícitas es cuando la columna varchar de unión contiene datos que no son numéricos. Oracle maneja las uniones de número a varchar2 convirtiendo las cadenas (consulte la cita de Gary en su comentario), por lo que en realidad ejecuta esto:

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

Si tableB.col2 contiene valores que no son numéricos (parece bastante probable, después de todo es una cadena), arrojará ORA-01722: invalid number . Al convertir explícitamente la columna de números en una cadena, se produce un cortocircuito en el comportamiento predeterminado de Oracle.

El hecho de que no tenga este problema en sus dos primeros entornos es una cuestión de suerte, no de configuración. Podría atacar en cualquier momento, porque solo requiere una cadena no numérica para interrumpir la consulta. Así que realmente debería ejecutar con la conversión explícita en todos los entornos.

En cuanto al rendimiento, podría crear un índice basado en funciones...

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