sql >> Databasteknik >  >> RDS >> Oracle

Oracle nummer och varchar går samman

En anledning till att implicita konverteringar misslyckas är när den sammanfogade varchar-kolumnen innehåller data som inte är numeriska. Oracle hanterar nummer till varchar2-anslutningar genom att konvertera strängarna (kolla in Garys citat i hans kommentar), så det utför faktiskt detta :

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

Om tableB.col2 innehåller värden som inte är numeriska - verkar ganska troligt, det är trots allt en sträng - då skickar den ORA-01722: invalid number . Genom att explicit casta nummerkolumnen till en sträng kortsluter du Oracles standardbeteende.

Det faktum att du inte får det här problemet i dina två första miljöer är en fråga om tur inte konfiguration. Den kan slå till när som helst, eftersom den bara kräver en icke-numerisk sträng för att bryta frågan. Så egentligen borde du köra med den explicita konverteringen i alla miljöer.

När det gäller prestanda kan du bygga ett funktionsbaserat index ...

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



  1. Oracle - Hur man tvingar användaren att INFOGA flera rader

  2. Hur delar man upp ett värde i flera rader på newline char i PostgreSQL?

  3. Bästa sättet att fråga en dataordbok i sql

  4. ResultSet.getString() på kolumnen VARCHAR2 returnerar tom sträng