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

Oracle Discussion :

Nested table et contrainte UNIQUE


Sujet :

Oracle

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Nested table et contrainte UNIQUE
    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
     
    CREATE OR REPLACE TYPE t_lgncom IS OBJECT (idmed CHAR(13), qte INTEGER);
    CREATE OR REPLACE TYPE col_t_lgncom IS TABLE OF t_lgncom;
     
    CREATE TABLE Commandes
    (
    	idcom CHAR(13) NOT NULL,
    	idpharma CHAR(13),
    	datecom DATE,
    	lgnscom col_t_lgncom,
    	remisecom NUMBER,
    	CONSTRAINT pkCommandes PRIMARY KEY (idcom),
    	CONSTRAINT fkCommandes FOREIGN KEY (idpharma) REFERENCES Pharmas(idpharma)
    )
    NESTED TABLE lgnscom STORE AS table_lgnscom, 
    TABLESPACE MEDIC STORAGE (INITIAL 200k NEXT 100k MAXEXTENTS 2);
    Voilà, j'aimerai ajouter la contrainte d'unicité suivante :
    dans une meme commande on ne doit pas pouvoir commander plusieurs fois le meme medicament (idmed).

    j'ai donc essayé ceci sans illusion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ALTER TABLE table_lgnscom ADD CONSTRAINT unique_med UNIQUE(idmed);
    et comme de fait cela s'applique à toutes les commandes
    Comment spécifier que je ne veux l'unicité que du couple (idmed,reference du parent) ?

    je voudrais egalement savoir s'il est possible de faire un select directement sur la nested table pour afficher toutes les lignes (avec la ref du parent de chaque ligne.

    Merci

    PS: Merci bcq à SheikYerbouti pour son tuto sur le PL/SQL

  2. #2
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Tu ne peux pas faire de contrainte unique sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    TABLE table_lgnscom ADD CONSTRAINT unique_med UNIQUE(idcom,idmed);
    Car tu souhaites un médicament par commande et no pas 1 médicament pour toute les les commande comme tu as fait

    Si c'est pas possible tente l'index unique !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    c'est une nested table y'a pas idcom mais une reference implicite au parent.
    cette reférence c'est NESTED_TABLE_ID je viens de trouver, je vais essayer voir...

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Vous pouvez appliquer des contraintes sur les attributs d'une collection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table table_lgnscom
    add constraint idmed_unique UNIQUE( idmed ) ;
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE table_lgnscom ADD CONSTRAINT unique_med UNIQUE(Nested_Table_Id,idmed);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SVRMGR> INSERT INTO Commandes VALUES('1','dubois','20051212',col_t_lgncom(t_lgncom('efferalgan',500)
    ,t_lgncom('efferalgan',400),t_lgncom('rhinadvil',400)),5);
     
    ORA-00001: violation de contrainte unique (PROPRIO.UNIQUE_MED)
    Ca marche :p

    Merci http://www.usd.edu/oracle/doc/appdev...6/adobjdes.htm

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Alors SheikYerbouti on lit pas jusqu'au bout les post :p
    Merci pour ton tuto.

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Citation Envoyé par evlad
    Alors SheikYerbouti on lit pas jusqu'au bout les post :p
    Merci pour ton tuto.
    ??? qu'ais-je donc raté ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  8. #8
    Membre averti

    Inscrit en
    Septembre 2003
    Messages
    425
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 425
    Points : 398
    Points
    398
    Par défaut
    Citation Envoyé par SheikYerbouti
    Citation Envoyé par evlad
    Alors SheikYerbouti on lit pas jusqu'au bout les post :p
    Merci pour ton tuto.
    ??? qu'ais-je donc raté ?
    Tu as dit :

    Citation Envoyé par SheikYerbouti
    Vous pouvez appliquer des contraintes sur les attributs d'une collection

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    alter table table_lgnscom 
    add constraint idmed_unique UNIQUE( idmed ) ;
    Et evlad dis dans son premier post la même chose :
    j'ai donc essayé ceci sans illusion:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE table_lgnscom ADD CONSTRAINT unique_med UNIQUEidmed);
    (
    Sinon un truc genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE table_lgnscom ADD CONSTRAINT unique_med UNIQUE(idcom , lgnscom.idmed);

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/10/2014, 19h25
  2. Contrainte "unique" sur une table sql!
    Par nixmind dans le forum Administration
    Réponses: 9
    Dernier message: 30/05/2012, 08h39
  3. Appliquer une contrainte unique sur une table existante
    Par zooffy dans le forum Développement
    Réponses: 3
    Dernier message: 24/05/2011, 15h28
  4. Réponses: 3
    Dernier message: 31/08/2006, 09h52
  5. Suppression de la contrainte unique
    Par mika dans le forum SQL
    Réponses: 3
    Dernier message: 20/02/2003, 17h56

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