Oracle
 sql >> база данни >  >> RDS >> Oracle

Обединяване на номер на Oracle и varchar

Една от причините, поради които неявните преобразувания са неуспешни, е, когато присъединяващата се колона 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) )
/ 



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lighty накратко

  2. Накарайте марионетната компилация да се провали, когато съдържащият се SQL скрипт не се изпълни

  3. Извикване на съхранена ПРОЦЕДУРА в Toad

  4. DBD::Инсталацията на Oracle причинява грешка

  5. Урок за Oracle sql:Ограничаване на набора от данни