Bonjour,
J'ai une table avec plus 60 millions de lignes alphanumériques et numériques (456AA,66545,etc..) je souhaite exclure dans une requete tous ce qui numérique donc
je crée une fonction comme ceci :
Je lance une requête comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 CREATE OR REPLACE FUNCTION est_nombre (p_chaine IN VARCHAR2) RETURN INT IS v_num NUMBER; BEGIN v_num := TO_NUMBER(p_chaine); RETURN 1; EXCEPTION WHEN VALUE_ERROR THEN RETURN 0; END est_nombre;
ce qui doit me sortir uniquement que les numériques.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select clef from maTable where est_nombre(clef)=1;
J'ai constaté dans le résultat qu'il ya toujours des clefs alphanumériques avec comme particularité uniquement la lettre "e" exemple(9e981,9e994, etc..).
J'ai effectué des test :
Avec la fonction :-->il me renvoie 1 ce qui est faux.
Code : Sélectionner tout - Visualiser dans une fenêtre à part select est_nombre('9e981') from dual;
Autre part avec ceci :---> oracle lance cette erreur ora:01722 "nombre non valide".
Code : Sélectionner tout - Visualiser dans une fenêtre à part select to_number('9e981') from dual;
Est ce que y'a possibilité d'optimiser ma fonction.
Je suis sous Oracle 11G
Merci
Partager