Bonjour,
J'aimerais pouvoir forcer une colonne de type char de l'une des tables de ma base de données Oracle à n'accpeter que les mots se composant exactement de 3 lettres et de 4 chiffres.
Comment ajouter cette contrainte svp ?
Merci
Bonjour,
J'aimerais pouvoir forcer une colonne de type char de l'une des tables de ma base de données Oracle à n'accpeter que les mots se composant exactement de 3 lettres et de 4 chiffres.
Comment ajouter cette contrainte svp ?
Merci
Regardez du côté des expressions régulières si vous êtes au moins en 10g.
Email : http://scr.im/waldar
Cela veut dire que:
1. les expression régulières n'existent ni dans Oracle 8 ni Oracle 9
2. Il faut avoir donc une version Oracle 10g ou 11g
Pour la syntaxe voir :
http://download.oracle.com/docs/cd/B...ix.htm#i691974
Merci, mais le site contient la syntaxe des expressions régulières, moi je parlais de la syntaxe de la requete dans laquelle on fait appel aux exp. régulières
Il faut utiliser REGEXP_LIKE et les fonctions
- REGEXP_INSTR
- REGEXP_REPLACE
- REGEXP_SUBSTR
Voir SQL Reference http://download.oracle.com/docs/cd/B...b14200/toc.htm
Salut Tunisiano,
Regarde ce petit exemple et teste-le si tu es en Oracle >= 10g.
Si tu ne comprends pas tout, demande
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 CREATE TABLE MA_TABLE(ID, CHAMP) AS SELECT LEVEL , LPAD(TRUNC(DBMS_RANDOM.VALUE(1, 999)), 3, '0') || DBMS_RANDOM.STRING('U', 4) FROM DUAL CONNECT BY LEVEL <= 10; INSERT INTO MA_TABLE VALUES (100, '123456'); INSERT INTO MA_TABLE VALUES (100, 'ABCDEF'); COMMIT; ALTER TABLE MA_TABLE ADD CONSTRAINT PK_MA_TABLE PRIMARY KEY(ID) ; DELETE MA_TABLE WHERE ID = 100; ALTER TABLE MA_TABLE ADD CONSTRAINT PK_MA_TABLE PRIMARY KEY(ID) ; INSERT INTO MA_TABLE VALUES (100, '123456'); INSERT INTO MA_TABLE VALUES (101, 'ABCDEF'); ALTER TABLE MA_TABLE ADD CONSTRAINT CK_FORMAT CHECK (REGEXP_LIKE(CHAMP, '^[[:digit:]]{3}[[:alpha:]]{4}$')) ENABLE NOVALIDATE; SELECT ID FROM MA_TABLE WHERE NOT REGEXP_LIKE(CHAMP, '^[[:digit:]]{3}[[:alpha:]]{4}$'); DELETE MA_TABLE WHERE ID IN (SELECT ID FROM MA_TABLE WHERE NOT REGEXP_LIKE(CHAMP, '^[[:digit:]]{3}[[:alpha:]]{4}$') ); ALTER TABLE MA_TABLE ENABLE VALIDATE CONSTRAINT CK_FORMAT ; INSERT INTO MA_TABLE VALUES (100, '123456'); INSERT INTO MA_TABLE VALUES (101, 'ABCDEF');
Avec des length, ltrim et rtrim c'est facile à gérer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 length(champ) = 7 AND length(rtrim(champ, '0123456789')) = 3 AND length(ltrim(lower(champ), 'abcdefghijklmnopqrstuvwxyz')) = 4
More Code : More Bugs. Less Code : Less Bugs
Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager