Come trovare un numero non valido in una tabella Oracle

September 11

i numeri non validi nelle tabelle Oracle possono essere frustrante e causare ben formato codice a comportarsi in modi inattesi e indesiderati, causando l'errore di Oracle ORA-01722. L'errore numero non valido in Oracle si pone, talvolta in modo apparentemente casuale, quando il codice SQL è scritto che utilizza una colonna carattere a base per le operazioni matematiche e si incontra un carattere non numerico.

A peggiorare le cose, questo errore non si verifica sempre, anche se le condizioni per esso sono soddisfatti. Ciò è dovuto principalmente al modo in cui una tabella viene percorso quando viene sottoposto a scansione per la corrispondenza dei dati.

istruzione

Evitare l'errore prima che accada

1 Creare una tabella con le colonne correttamente definite. Per esempio:

CREATE TABLE numbers_and_words

(Number_col AS numero,

word_col AS VARCHAR2 (100))

2 Programmare l'applicazione di inserire solo i dati numerici nei dati della colonna number_col e carattere nella colonna word_col.

3 Creare una condizione di controllo nell'applicazione che assicura i dati numerici non viene passato alla colonna number_col. Oracle permetterà la rappresentazione carattere di un numero da memorizzare in una colonna di caratteri.

Lavorare intorno ad esso

4 Scrivere una funzione per la cattura di dati non numerici. Un esempio:

CREATE FUNCTION is_numeric (str IN VARCHAR2)

NUMERO DI RITORNO

È

num NUMERO;

INIZIO

num: = TO_NUMBER (str);

RITORNO 1;

ECCEZIONE

QUANDO ALTRI ALLORA

RETURN 0;

FINE;

5 Scrivi una vista che utilizza la funzione di creare una rappresentazione della tabella senza dati non numerici. Supponendo che il nome della tabella è t1 e la colonna con i dati mista è chiamata "mixed_col", un solo numerico vista potrebbe essere scritta come segue:

CREATE VIEW numbersonly AS

SELEZIONE mixed_col da T1

DOVE is_numeric (mixed_col) = 1

6 Utilizzare la vista numbersonly nelle query che hanno bisogno di fare operazioni numeriche basate sulla colonna. Per esempio:

SELECT * FROM numbersonly

DOVE mixed_col> 35

Consigli e avvertenze

  • Definire vincoli controlla dettagliate su colonne per evitare l'inserimento dei dati desiderati in tabelle.