Oracle
 sql >> Base de données >  >> RDS >> Oracle

Numéro Oracle et jointure varchar

L'une des raisons pour lesquelles les conversions implicites échouent est lorsque la colonne varchar jointe contient des données qui ne sont pas numériques. Oracle gère les jointures nombre vers varchar2 en convertissant les chaînes (consultez la citation de Gary dans son commentaire), il exécute donc ceci :

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

Si tableB.col2 contient des valeurs qui ne sont pas numériques - cela semble assez probable, c'est une chaîne après tout - alors il lancera ORA-01722: invalid number . En convertissant explicitement la colonne numérique en une chaîne, vous court-circuitez le comportement par défaut d'Oracle.

Le fait que vous n'obteniez pas ce problème dans vos deux premiers environnements est une question de chance et non de configuration. Il peut frapper à tout moment, car il ne nécessite qu'une seule chaîne non numérique pour interrompre la requête. Vous devriez donc vraiment exécuter la conversion explicite dans tous les environnements.

Quant aux performances, vous pourriez construire un index basé sur les fonctions ...

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