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 :

Index unique


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut Index unique
    J’ai un petit souci et j’espère que vous pourriez m’aider.
    En fait j’ai un champ ‘numéro d’ordre’ ou je veux qu’il prend un numéro unique sauf pour Null et 0 ces deux la ne sont pas uniques et on peut les trouver plusieurs fois.
    J’ai fait un index unique sur la table :
    CREATE UNIQUE INDEX ix_table1 ON table1 (decode (numero_ordre, NULL, NULL,
    0,0, champ2), numero_ordre);

    Pour Null ca marche par contre pour 0 ca bloque :
    ORA-01452: cannot CREATE UNIQUE INDEX; duplicate keys found
    Merci de m’aider

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Ton decode dit :
    Si Null Then NULL et la valeur NULL n’est pas normalement indexé
    Si 0 Then 0
    Etc…

    Donc si ils existent n valeurs 0 comment veux tu avoir un index unique ?

    Question : C’est un index unique ou une contrainte d’unicité ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    J'ai fait un index unique
    En fait je veux que tous les chiffres de 1 à 999 soient uniques par contre je peut avoir plusieurs 0 et plusieurs null.

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Donc tu as besoin d’une contrainte. Est-ce que ta table contient déjà des données non uniques et que tu veux que les données à venir respectent cette règle ou est-ce que tu veux tout simplement ajouter une contrainte d’unicité un peu spéciale ?

    PS Si tu fait quelque chose de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create unique index ix_test_nr on test_nr (decode(a,0,null,a))
    ça va passer mais je ne pense pas que c'est une bonne solution.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 6
    Par défaut
    Et je fais comment si je change en contrainte unique pour qu'il puisse prendre plusieurs 0.

    Sinon pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX ix_test_nr ON test_nr (decode(a,0,NULL,a))
    je l'ai déjà essayé mais même erreur.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par mannou_k Voir le message
    Et je fais comment si je change en contrainte unique pour qu'il puisse prendre plusieurs 0.

    Sinon pour:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE UNIQUE INDEX ix_test_nr ON test_nr (decode(a,0,NULL,a))
    je l'ai déjà essayé mais même erreur.
    J'ai quelques doutes si tu me permets
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    Connected to Oracle9i Enterprise Edition Release 9.2.0.5.0 
    Connected as mni
     
     
    SQL> 
    SQL> drop table test_nr
      2  /
     
    Table dropped
     
    SQL> create table test_nr (a number, b number)
      2  /
     
    Table created
     
    SQL> insert into test_nr values(null, null)
      2  /
     
    1 row inserted
     
    SQL> insert into test_nr values(null, null)
      2  /
     
    1 row inserted
     
    SQL> insert into test_nr values(0,0)
      2  /
     
    1 row inserted
     
    SQL> insert into test_nr values(0,0)
      2  /
     
    1 row inserted
     
    SQL> insert into test_nr select level,level from dual connect by level < 100
      2  /
     
    99 rows inserted
     
    SQL> commit
      2  /
     
    Commit complete
     
    SQL> Select a, count(*)
      2    from test_nr
      3   group by a
      4   having count(*) > 1
      5  /
     
             A   COUNT(*)
    ---------- ----------
             0          2
                        2
     
    SQL> create unique index ix_test_nr on test_nr (decode(a,0,NULL,a))
      2  /
     
    Index created
     
    SQL>

Discussions similaires

  1. Connaitre l'index unique déclenché
    Par Hobbi1 dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2006, 15h50
  2. Réponses: 3
    Dernier message: 02/05/2006, 21h36
  3. Réponses: 7
    Dernier message: 27/04/2006, 10h21
  4. Sql Server Express - Probleme index unique et valeurs null
    Par Fayoul dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/02/2006, 17h22
  5. [IMP/EXP] Probleme d'index unique
    Par rours dans le forum Oracle
    Réponses: 17
    Dernier message: 18/05/2005, 15h37

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