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

Oracle nummer og varchar slutter sig til

En af grundene til, at implicitte konverteringer mislykkes, er, når varchar-kolonnen sammenføjning indeholder data, som ikke er numeriske. Oracle håndterer nummer til varchar2 joins ved at konvertere strengene (tjek Garys citat i hans kommentar), så det faktisk udfører dette :

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

Hvis tableB.col2 indeholder værdier, der ikke er numeriske - virker ret sandsynligt, det er trods alt en streng - så vil den kaste ORA-01722: invalid number . Ved eksplicit at caste nummerkolonnen til en streng kortslutter du Oracles standardadfærd.

Det faktum, at du ikke får dette problem i dine to første miljøer, er et spørgsmål om held og ikke konfiguration. Det kan slå til når som helst, fordi det kun kræver én ikke-numerisk streng for at bryde forespørgslen. Så egentlig burde du køre med den eksplicitte konvertering i alle miljøer.

Hvad angår ydeevne, kan du bygge et funktionsbaseret indeks ...

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



  1. Hvornår skal jeg bruge MySQL-transaktioner?

  2. venstre ydre forbindelsesspørgsmål

  3. Klynge- og ikke-klyngeindeks i PostgreSQL

  4. Kan ikke installere PG gem på Mac OSX