Една от причините, поради които неявните преобразувания са неуспешни, е, когато присъединяващата се колона varchar съдържа данни, които не са числови. Oracle обработва число към varchar2 обединения чрез преобразуване на низовете (вижте цитата на Gary в неговия коментар), така че всъщност изпълнява това:
select a.col1, b.somecol
from tableA a inner join tableB b on to_number(b.col2)=a.col1;
Ако tableB.col2 съдържа стойности, които не са числови - изглежда доста вероятно, все пак това е низ - тогава ще изхвърли ORA-01722: invalid number
. Чрез изрично прехвърляне на числовата колона към низ вие прекъсвате поведението по подразбиране на Oracle.
Фактът, че не получавате този проблем в първите две среди е въпрос на късмет, а не на конфигурация. Може да удари по всяко време, защото изисква само един нечислов низ, за да прекъсне заявката. Така че наистина трябва да работите с изрично преобразуване във всички среди.
Що се отнася до производителността, можете да изградите базиран на функции индекс ...
create index whatever_idx on tableA ( to_char(col1) )
/