IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Check constraint à mettre en place [11gR2]


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Par défaut Check constraint à mettre en place
    * Bonjour, *

    En Oracle 11g, j'aimerais connaître un moyen de contrôler l'update et l'insert pour une colonne (TYPE) et qui empêcherait plus d'une entrée avec une valeur qui se résumerait comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select count(1) FROM MY_TABLE WHERE TYPE = 'PLS') = 1
    . Donc si cette entrée existe un message d'erreur est envoyé à l'utilisateur.

    * Merci *

  2. #2
    Membre chevronné
    Avatar de Bibeleuh
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2010
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2010
    Messages : 209
    Par défaut
    Je ne comprends pas la question, le but c'est d'avoir uniquement des valeurs uniques dans la table pour cette colonne ?
    Dans ce cas une simple contrainte unique répond à la problématique

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 60
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Par défaut
    Oui, effectivement cela serait trop simple. Dans MY_TABLE la colonne TYPE peut prendre différentes valeurs , 'PLS', 'CER','SDF', etc. Je ne veux qu'une entrée avec TYPE='PLS' pour les autres je peux en avoir autant que je veux. Donc dès que j'ai une ligne avec TYPE='PLS' je ne veux plus en avoir d'autres. Donc il n'y aura plus aucun insert et update possible avec TYPE='PLS' ! J'espère que c'est plus clair.

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Utilise un FBI unique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create unique index fbidx_type_pls_unique on MY_TABLE(case when upper(type)='PLS' then 1 end)

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Une contrainte sur une colonne virtuelle fonctionne aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    alter table MY_TABLE 
      add type_pls as (case type when 'PLS' then 1 end);
     
    alter table MY_TABLE 
      add constraint uk_my_table_type_pls
            unique (type_pls)
            using index;

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

Discussions similaires

  1. mettre en place un réseau wifi
    Par Le Pharaon dans le forum Administration
    Réponses: 2
    Dernier message: 23/12/2005, 14h59
  2. [Timer] Comment mettre en place un genre de timer ?
    Par freddyboy dans le forum MFC
    Réponses: 6
    Dernier message: 04/08/2005, 10h50
  3. Réponses: 5
    Dernier message: 28/07/2004, 11h39
  4. Réponses: 1
    Dernier message: 02/06/2004, 13h59
  5. Comment mettre en place une structure 3 tiers.
    Par WOLO Laurent dans le forum Débats sur le développement - Le Best Of
    Réponses: 13
    Dernier message: 27/07/2003, 22h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo