Ungültige Zahlen in Oracle-Tabellen kann frustrierend sein und dazu führen, wohlgeformt Code in unerwartete und unerwünschte Weise zu verhalten , was in der Oracle ORA- 01722 Fehler. Die ungültige Anzahl Fehler in Oracle auftritt, manchmal in einem scheinbar zufälliger Weise , wenn SQL -Code geschrieben wird , dass wird ein Zeichen -basierte Spalte für mathematische Operationen und eine nicht-numerische Zeichen gefunden . Erschwerend kommt hinzu , wird dieser Fehler nicht immer auftreten, obwohl die Bedingungen dafür erfüllt sind. Dies ist vor allem auf die Art und Weise eine Tabelle durchlaufen , wenn sie für die passenden Daten gescannt wird . Things You
Oracle Datenbank fà Tabelle mit VARCHAR2 Spalte
Daten des numerischen und nicht- numerischen Typ in der Spalte VARCHAR2
brauchen anzeigen Weitere Anweisungen
Vermeiden Sie den Fehler, bevor it Happens
1
erstellen Sie eine Tabelle mit Spalten korrekt definiert . Zum Beispiel:
CREATE TABLE numbers_and_words
( number_col AS-Nummer ,
word_col AS varchar2 (100) )
2
Programm die Anwendung wird nur numerische Daten in der Spalte number_col und Zeichendaten in der word_col Spalte.
3
erstellen einen Scheck erhalten in der Anwendung , die numerische Daten nicht mit dem number_col Säule gewährleistet . Oracle wird es der Charakter -Darstellung einer Zahl in einer Spalte Charakter gespeichert werden.
Umgehen Es
4
eine Funktion, um nicht-numerische Daten fangen schreiben . Ein Beispiel :
CREATE FUNCTION is_numeric (str IN VARCHAR2 )
RETURN NUMBER
IS
num NUMBER ;
BEGIN
num: = TO_NUMBER (str) ;
return 1;
AUSNAHME
WENN ANDERE DANN
return 0;
< p> END;
5
schreiben Ansicht, die die Funktion verwendet, um eine Darstellung der Tabelle ohne nicht-numerischen Daten zu erstellen. Unter der Annahme, dass der Name der Tabelle t1 ist und die Säule mit dem gemischten Daten wird als " mixed_col ", eine nur numerisch Blick könnte wie folgt geschrieben werden:
CREATE VIEW numbersonly AS
SELECT FROM mixed_col t1
WHERE is_numeric ( mixed_col ) = 1
6
Verwenden Sie die Ansicht numbersonly in Abfragen, die auf numerischen Werten basiert Operationen auf der Spalte tun müssen. Zum Beispiel:
SELECT * FROM numbersonly
WHERE mixed_col > 35