I numeri non validi nelle tabelle Oracle possono essere frustrante e ben formato codice a comportarsi in modi imprevisti e indesiderati, e provocare l'errore Oracle ORA-01722. L'errore numero non valido in Oracle si pone, a volte in maniera apparentemente casuale, quando codice SQL è scritto che usi un carattere basato su colonna per operazioni matematiche e un carattere non numerico viene rilevato.
A peggiorare le cose, questo errore non si verifica sempre anche se sono soddisfatte le condizioni per esso. Questo è principalmente dovuto al modo che una tabella viene attraversata quando esso viene analizzato per la corrispondenza dei dati.
Istruzioni
Evitare l'errore prima che accada
1
Creare una tabella con colonne correttamente definite. Per esempio:
CREATE TABLE numbers_and_words
(number_col come numero,
word_col come varchar2(100))
2
Programmare l'applicazione per inserire dati numerici nei dati di carattere e colonna di number_col nella colonna word_col.
3
Creare una condizione di controllo nell'applicazione che assicura dati numerici non viene passati alla colonna number_col. Oracle permetterà la rappresentazione di caratteri di un numero per essere archiviati in una colonna di carattere.
Lavorare intorno ad esso
4
Scrivere una funzione per catturare dati non numerici. Un esempio:
CREARE la funzione is_numeric (str IN VARCHAR2)
NUMERO DI RITORNO
È
num numero;
BEGIN
num: = TO_NUMBER (str);
RETURN 1;
ECCEZIONE
QUANDO GLI ALTRI POI
RETURN 0;
FINE;
5
Scrivere una vista che utilizza la funzione per creare una rappresentazione della tabella senza dati non numerici. Supponendo che il nome della tabella è t1 e la colonna con i dati misti è chiamata "mixed_col", una vista solo numerico potrebbe essere scritta come segue:
CREATE VIEW numbersonly come
SELECT mixed_col FROM t1
DOVE is_numeric(mixed_col) = 1
6
Utilizzare la visualizzazione di numbersonly nelle query che dovete fare operazioni di numerica sulla colonna. Per esempio:
Selezionare * da numbersonly
DOVE mixed_col > 35
Consigli & Avvertenze
- Definire i vincoli check dettagliato sulle colonne per evitare l'inserimento di dati indesiderati nelle tabelle.