Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Numer Oracle i varchar łączą się

Jednym z powodów niepowodzenia konwersji niejawnych jest to, że łącząca kolumna varchar zawiera dane, które nie są liczbowe. Oracle obsługuje liczbę do złączeń varchar2 poprzez konwersję ciągów (sprawdź cytat Gary'ego w jego komentarzu), więc faktycznie wykonuje to:

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

Jeśli tabelaB.col2 zawiera wartości, które nie są numeryczne - wydaje się całkiem prawdopodobne, w końcu jest to ciąg - wtedy wyświetli ORA-01722: invalid number . Poprzez jawne rzutowanie kolumny liczbowej na ciąg znaków skracasz domyślne zachowanie Oracle.

To, że nie masz tego problemu w pierwszych dwóch środowiskach, jest kwestią szczęścia, a nie konfiguracji. Może wystąpić w dowolnym momencie, ponieważ wymaga tylko jednego nienumerycznego ciągu do przerwania zapytania. Więc naprawdę powinieneś uruchomić z jawną konwersją we wszystkich środowiskach.

Jeśli chodzi o wydajność, możesz zbudować indeks oparty na funkcjach ...

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. Obejście dla sprzężenia zewnętrznego z operatorem IN w Oracle

  2. Oracle 19c Open_cursor przekroczył problem

  3. Zagnieżdżony klucz podstawowy i obcy tabeli w Oracle

  4. Zwracanie kursora referencyjnego Oracle i dołączanie wielu wyników

  5. Zmień port Oracle z portu 8080