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

    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 actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2009
    Messages
    424
    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 : 424
    Points : 182
    Points
    182

    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 821
    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 821
    Points : 13 502
    Points
    13 502

    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 actif
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    mai 2009
    Messages
    424
    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 : 424
    Points : 182
    Points
    182

    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
  •