Ho una query che unisce due tabelle. Una tabella ha una colonna che è di tipo varchar e l'altra tabella ha il tipo di numero. Ho eseguito la mia query su 3 database Oracle e sto vedendo alcuni strani risultati che spero possano essere spiegati. Su due dei database qualcosa come i seguenti lavori.join Oracle e varchar
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=a.col1;
In questa tabella di queryA.col1 è di tipo numero e tabellaB.col2 è di tipo varchar. Funziona bene in due dei database ma non nel terzo. Nel terzo errore (ORA-01722). Nel terzo ho bisogno di fare qualcosa come ...
select a.col1, b.somecol
from tableA a inner join tableB b on b.col2=to_char(a.col1);
Questo funziona in tutti i database. La domanda che ho è perché? Quanto sopra è una query semplificata e la query reale è un po 'più complessa e recupera molti dati, quindi la prima versione è molto più veloce. Se potessi farlo funzionare in tutti gli ambienti sarebbe fantastico.
Qualcuno sa perché questo potrebbe funzionare in alcuni database di Oracle e non in altri senza il cast sul tipo di dati? C'è un ambiente globale che consente tale comportamento?
regole di confronto sarebbe la mia prima ipotesi. Oracle di solito consente la conversione implicita, quindi potrebbe essere che una colonna non passi la conversione implicita ... –
Hai scritto tutte quelle parole e ancora non sei riuscito a spiegare esattamente * come * la prima query non funziona nel terzo database. – APC
Mi dispiace, ottengo un errore ORA-01722 nella prima query, terzo database – broschb