Précédent   Forum du club des développeurs et IT Pro > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/12/2012, 17h28   #1
owenho
Membre habitué
 
Homme
Architecte de système d'information
Inscription : mai 2009
Messages : 240
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : mai 2009
Messages : 240
Points : 121
Points : 121
Par défaut Comment puis-je modifier la contrainte ?

Bonjour tout le monde ,

je suis sur oracle 10g,
j'ai crée une table contacts comme suit :
Code :
1
2
3
4
5
6
7
8
CREATE TABLE contacts (
name varchar2(50),
number_phone varchar2(50),
email varchar2(30),
constraint email_constraint CHECK(regexp_like(email,'@')),
constraint numner_phone_check
CHECK(regexp_like(number_phone,('[0,9][0,9][0,9]-[0,9][0,9]-[0,9][0,9]-[0,9][0,9]')))
)
aprés je voulais modifier la constraint numner_phone_check pour ajouter un [0,9] au début , j'ai fait alter table comme celui la:

Code :
1
2
3
4
ALTER TABLE contacts
MODIFY constraint NUMNER_PHONE_CHECK 
CHECK(regexp_like(number_phone,'[0,9][0,9][0,9][0,9]-[0,9][0,9]-[0,9][0,9]-[0,9][0,9]'))
/
et une erreur s'affiche me dis comme quoi la commande ne se termine pas corrctement :

Code :
1
2
3
 
ERREUR à la ligne 3 :
ORA-00933: la commande SQL ne se termine pas correctement
est ce que je peux pas modifier la constrainte , ou je dois la supprimer puis la recréer ?

Merci pour votre aide
owenho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2012, 18h08   #2
owenho
Membre habitué
 
Homme
Architecte de système d'information
Inscription : mai 2009
Messages : 240
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : mai 2009
Messages : 240
Points : 121
Points : 121
bon j'ai dropé la contrainte puis je l'ai crée , maintenant la condition sur l'email ça marche , mais pour le number phone , il me donne une erreur méme si la condition est bien repécté.

la condition:
Code :
regexp_like(number_phone,'[0,9][0,9][0,9][0,9]-[0,9][0,9]-[0,9][0,9]-[0,9][0,9]'
lorsque je fais entrez :
Code :
1
2
 INSERT INTO contacts(name,number_phone,email)
 VALUES ('Name','0777-63-71-79','Name@gmail.com');
il me donne :
Code :
1
2
ERREUR à la ligne 1 :
ORA-02290: violation de contraintes (HR.NUMBER_PHONE_CHECK) de vérification
est ce j'ai raté quelque chose !
owenho est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 09h58   #3
Waldar
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 6 278
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 35
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : septembre 2008
Messages : 6 278
Points : 13 480
Points : 13 480
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Oui, les plages dans les expressions régulières sont définies avec le tiret et non pas la virgule.

Le plus simple reste de tester votre code.
Au passage je vous propose des masques alternatifs :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
WITH MaTable AS
(
SELECT '0777-63-71-79' AS number_phone FROM dual
)
SELECT case when regexp_like(number_phone,'[0,9][0,9][0,9][0,9]-[0,9][0,9]-[0,9][0,9]-[0,9][0,9]') then 1 else 0 end AS tst1
     , case when regexp_like(number_phone,'[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9]') then 1 else 0 end AS tst2
     , case when regexp_like(number_phone,'[0-9]{4}-[0-9]{2}-[0-9]{2}-[0-9]{2}')                   then 1 else 0 end AS tst3
     , case when regexp_like(number_phone,'[0-9]{4}(-[0-9]{2}){3}')                                then 1 else 0 end AS tst4
     , case when regexp_like(number_phone,'[[:digit:]]{4}(-[[:digit:]]{2}){3}')                    then 1 else 0 end AS tst5
  FROM MaTable;
 
TST1 TST2 TST3 TST4 TST5
---- ---- ---- ---- ----
   0    1    1    1    1
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2012, 15h54   #4
owenho
Membre habitué
 
Homme
Architecte de système d'information
Inscription : mai 2009
Messages : 240
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : mai 2009
Messages : 240
Points : 121
Points : 121
Merci Waldar pour votre réponse, c'est bien clair, donc le problème était dans la chaîne de l'expression régulière .
owenho est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h17.


 
 
 
 
Partenaires

Hébergement Web