Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre confirmé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2009
    Messages
    425
    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 : 425
    Points : 200
    Points
    200

    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

  2. #2
    Membre confirmé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2009
    Messages
    425
    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 : 425
    Points : 200
    Points
    200

    Par défaut

    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 !

  3. #3
    Modérateur

    Homme Profil pro Fabien
    Ingénieur d'études en décisionnel
    Inscrit en
    septembre 2008
    Messages
    6 893
    Détails du profil
    Informations personnelles :
    Nom : Homme Fabien
    Âge : 36
    Localisation : France, Paris (Î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 893
    Points : 14 332
    Points
    14 332

    Par défaut

    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

  4. #4
    Membre confirmé
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2009
    Messages
    425
    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 : 425
    Points : 200
    Points
    200

    Par défaut

    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 .

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •