numéros invalides dans les tables Oracle peut être frustrant et provoquer code bien formé pour se comporter de manière inattendue et indésirable , ce qui entraîne l'erreur Oracle ORA- 01722 . L'erreur de numéro non valide dans Oracle se pose , parfois d'une manière apparemment aléatoire , lorsque le code SQL est écrit qui utilise une colonne à base de caractères pour les opérations mathématiques et un caractère non numérique est rencontré. Pour aggraver les choses , cette erreur ne sera pas toujours le cas , même si les conditions pour cela sont réunies. Cela est principalement dû à la façon dont un tableau est traversé quand il est en cours d'analyse pour comparer les données . Choses que vous devez
base de données Oracle
table avec un
colonne VARCHAR2 données des deux type numérique et non numérique dans la colonne VARCHAR2
Afficher plus Instructions
éviter l'erreur Avant it Happens
1
Créer un tableau avec des colonnes bien définies. Par exemple:
CREATE TABLE numbers_and_words
( number_col numéro d'AS , AB
word_col AS varchar2 ( 100) )
2
programme l'application de seulement placer des données numériques dans les données de la colonne et le caractère number_col dans la colonne word_col .
3
Créer une condition de vérification dans l'application qui garantit que les données numériques ne sont pas répercutées dans la colonne number_col . Oracle permettra la représentation des caractères d'un numéro à enregistrer dans une colonne de type caractère .
Contourner
4
écrire une fonction pour attraper des données non numériques . Un exemple :
CREATE is_numeric FONCTION (str IN VARCHAR2 )
retour Nombre
NOMBRE num ;
BEGIN < br >
num: = TO_NUMBER (str) ;
return 1;
EXCEPTION
QUAND autres alors
return 0;
< p> END;
5
Ecrire une vue qui utilise la fonction pour créer une représentation de la table sans données non numériques . En supposant que le nom de la table est t1 et la colonne avec les données mixte est appelée « mixed_col , " vue uniquement numérique pourrait être rédigé comme suit :
Créer une vue NumbersOnly AS
CHOISIR DE mixed_col t1
OÙ is_numeric ( mixed_col ) = 1
6
Utilisez la vue NumbersOnly dans les requêtes qui ont besoin de faire des opérations à base numérique sur la colonne. Par exemple:
SELECT * FROM NumbersOnly
OÙ mixed_col > 35