Bonjour,
J'ai le problème suivant: Je dois entrer un champ de la forme
"aaaa 4444 4444 4444"
Comment dois-je écrire ma contrainte de domaine pour m'assurer que les douzes dernier caractères soient des chiffres??
Merci
Version imprimable
Bonjour,
J'ai le problème suivant: Je dois entrer un champ de la forme
"aaaa 4444 4444 4444"
Comment dois-je écrire ma contrainte de domaine pour m'assurer que les douzes dernier caractères soient des chiffres??
Merci
exemple :
chaine étant ta chaine de caractères.Code:UPPER(SUBSTR(chaine, 5)) = LOWER(SUBSTR(chaine, 5))
Attention, cela ne fonctionne pas si tu as des caractères spéciaux dans ta chaîne à tester :(
Sinon 1 autre technique s'offre à toi :
- Créer une fonction is_number te permettant de valider ou non la présence d'un number :
Il n'y a plus qu'à l'appeler dans une boucle résultant d'un substring ...Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SQL> create or replace 2 function isnumeric 3 ( p_string in varchar2) 4 return boolean 5 as 6 l_number number; 7 begin 8 l_number := p_string; 9 return TRUE; 10 exception 11 when others then 12 return FALSE; 13 end; 14 /
Bon courage,
Pardon, je suis débutant, mais je ne comprends pas la réponse d'orafrance...
J'ai besoin de 4 lettre suivi de 12 integer.
Mon problème c'est de vérifier si les 12 derniers caractères sont des int...
Je ne vois pas comment le upper et le lower font cela.
Merci
qu'est ce qui peut être identique en majuscule et minuscule si ce n'est les nombre, et en effet, les caractères spéciaux ;)
Houla.. tiré par les cheveux ton truc !
Un petitCode:
1
2 LTRIM(souschaine, '0123456789') IS NULL AND souschaine IS NOT NULL
Ok je me reprends...
Le champ d'entrée doit comporter 16 caractères. Les 4 premiers sont des lettres qui proviennent d'un autre champ et ca je n'ai pas eu de problème à écrire ma contrainte de domaine. Mais pour les douzes derniers je ne suis pas capable de vérifier s'ils sont des int.
Je ne comprends pas vraiment ton ...IS NULL AND souschaine IS NOT NULL...
Pourrais tu m'éclaire stp.
Désolé pour ma lenteur hehe.
Salut,
Si tu es en 10g, tu peux utiliser REGEXP_LIKE
Voici un exemple d'une contrainte sur le numéro de téléphone
Voici un lien sur les expressions régulières http://www.oracle.com/technology/ora...egexp_pt2.htmlCode:
1
2
3
4
5 ALTER TABLE students ADD CONSTRAINT stud_ssn_ck CHECK (REGEXP_LIKE(ssn, '^([[:digit:]]{3}-[[:digit:]]{2}-[[:digit:]]{4}|[[:digit:]]{9})$'))
Essaye :
Avec : ABCD 9999 9999 9999 9999 et ABCD 9999 9999 ABCD 9999Code:select LTRIM(SUBSTR(REPLACE('&chaine',' ',''),5), '0123456789') from dual
Est-ce que tu comprends mieux ?
Orafrance, je rajouterai en plus comme test le NULL pour bien tout comprendre comment ça marche ;)
Avec ces 3 chaines de caractères :
'ABCD 9999 9999 9999 9999'
'ABCD 9999 9999 ABCD 9999'
''
Mille fois merci. Je n'étais pas trop familier avec la syntaxe '123456789'...