sql >> Databáze >  >> RDS >> Oracle

Oracle číslo a varchar se připojí

Jedním z důvodů, proč implicitní převody selžou, je, když spojovací sloupec varchar obsahuje data, která nejsou číselná. Oracle zpracovává spojení čísla na varchar2 převodem řetězců (podívejte se na Garyho citaci v jeho komentáři), takže ve skutečnosti provede toto:

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

Pokud tabulkaB.col2 obsahuje hodnoty, které nejsou číselné – zdá se to docela pravděpodobné, je to koneckonců řetězec – pak to vrhne ORA-01722: invalid number . Explicitním přetypováním sloupce s číslem na řetězec zkratujete výchozí chování Oracle.

Skutečnost, že tento problém nenastane ve vašich prvních dvou prostředích, je věcí štěstí, nikoli konfigurace. Může zasáhnout kdykoli, protože k přerušení dotazu vyžaduje pouze jeden nečíselný řetězec. Takže opravdu byste měli běžet s explicitní konverzí ve všech prostředích.

Pokud jde o výkon, můžete vytvořit index založený na funkcích ...

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



  1. Jak kopírovat data z jedné databáze/tabulky do jiné databáze/tabulky

  2. Qt - Jak získat|kompilovat ovladač Mysql

  3. PHP PDO bindParam() a MySQL BIT

  4. Konstanty v dotazu Oracle SQL