[Oracle] problème d'insertion dans une table

Fermé
Yeah - 18 mai 2004 à 14:30
ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 - 18 mai 2004 à 16:31
Bonjour,
Voial j'ai un petit problème, dont la solution doit etre evidente mais malheureusement je ne vois pas.
Donc je voudrai inserer des données dans la table formation.
Voici sa structure:

create table FORMATION (
MATRICULE CHAR(10) not null,
NUM_FORM INTEGER not null,
"DATE" DATE,
TITRE VARCHAR2(50),
HEURE INTEGER,
constraint PK_FORMATION primary key (NUM_FORM),
constraint FK_FORMATIO_PERS_FORM_PERSONNE foreign key (MATRICULE)
references PERSONNE (MATRICULE)
)

Donc voici un petit exemple d'insertion :

INSERT INTO FORMATION VALUES ('aaaaaaaaaa',1,'01-01-01','math',10);
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',2,'01-01-01','info',20);
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',3,'01-01-01','angl',30);
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',4,'01-01-01','ita',40);

INSERT INTO FORMATION VALUES ('bbbbbbbbbb',1,'01-01-01','math',10);
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',2,'01-01-01','info',20);
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',3,'01-01-01','angl',30);
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',4,'01-01-01','ita',40);

La première serie d'insertion fonctionne, mais la deuxième serie ne veux pas et j'ai le droit une erreur du genre:

INSERT INTO FORMATION VALUES ('bbbbbbbbbb',1,'01-01-01','math',10)
*
ERROR at line 1:
ORA-00001: unique constraint (HR.PK_FORMATION) violated

Dois-je redefinir ma table à cause de la clef primaire, ou est t'il possible d'inserer ces données d'une autre facon ?

J'espere avoir sufisament clair.
Merci beaucoup
A voir également:

4 réponses

ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 7
18 mai 2004 à 14:50
En fait, dans ta 2eme serie tu utilises les meme cles primaires que la 1ere :
INSERT INTO FORMATION VALUES ('aaaaaaaaaa',1,'01-01-01','math',10); 
INSERT INTO FORMATION VALUES ('bbbbbbbbbb',1,'01-01-01','math',10); 


la cle primaire de aaaaaaaa et bbbbbbbb est 1. Sachant qu'une cle primaire est par definition unique (d'ou "unique constraint") et bien il rale. Commence ta 2eme serie par 5 :)

D'ailleurs, il est de coutume de mettre la clé primaire en 1er : 1, 'aaaaaaa' (...)
pour eviter justement ces erreurs et pour avoir une meilleure vision du caractere unique de la ligne

voila

Y a rien de plus con qu'un ordinateur. 
Louis Schuffenecker 
0
Salut,
oui, mais comment je dois definir alors ma table, puisque je veux pouvoir acceder a cette table par le matricule et le numéro de formation.
Par exemple SELECT MATRICULE FROM FORMATION WHERE NUM_FORM=1
car pour un matricule donné je veux qu'il y ai plusieur formation

Merci
0
C bon j'ai reussit a avoir la modification de la table
create table FORMATION (
MATRICULE CHAR(10) not null,
NUM_FORM INTEGER not null,
"DATE" DATE,
TITRE VARCHAR2(50),
HEURE INTEGER,
constraint PK_FORMATION primary key (MATRICULE ,NUM_FORM),
constraint FK_FORMATIO_PERS_FORM_PERSONNE foreign key (MATRICULE)
references PERSONNE (MATRICULE)
)
0
ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 7
18 mai 2004 à 15:18
Ca marche parfaitement bien. Tu as juste confondu le matricule de la personne et le numero de formation dans tes requetes d'insertion.
Si tu remettais tout en ordre :


INSERT INTO FORMATION VALUES (1,'aaaaaaaaaa','01-01-01','math',10); 
INSERT INTO FORMATION VALUES (1,'bbbbbbbbbb','01-01-01','math',10); 
INSERT INTO FORMATION VALUES (1,'cccccccccc','01-01-01','math',10); 

Là il y 3 matricules pour la formation 1.

Dans ta modification tu sous entend qu'une formation est relative à 1 individu, tu a créé une cle relative entre "formation" et "personne" c'est à dire qu'une personne peut avoir pls formation (qui lui est propre) mais il ne peut y avoir pls personnes dans cette formation.
Ton code etait bon, tu as juste mal ordonné tes colonnes.

:)

Y a rien de plus con qu'un ordinateur. 
Louis Schuffenecker 
0
Tout ca est vraiment subtil,
Par contre dans ma table le numéro de formation ne correspond pas à un type de formation mais à son numéro de formation.
Par exemple si le matricule 'aaaaaaaaaa' donne sa premiere formation alors on la stoque dans num_form=1, pour sa deuxième ca sera num_form=2 ect....

Cela change t'il quelque chose ?
0
ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 7 > Yeah
18 mai 2004 à 15:39
En fait on va faire plus simple pour etre sur de te donner une bonne reponse. Peux tu me donner ton association entre ces 2 tables (ton mld) ou une phrase. Car je ne sais pas si c'est ta personne qui peut effectuer pls formation, ou qu'1 formation peut correspondre à pls personnes, qu'il peut y avoir pls formations par personnes et qu'une formation peut faire participer pls personnes.....

Il y a du choix :)


Y a rien de plus con qu'un ordinateur. 
Louis Schuffenecker 
0
En gros une personne est defini avec un matricule unique;
Une personne peut effectuer de 0 à n formation;
Toutes les formations qu'il effectue son classé par numéro de formation(donc de 0 à n ou plutôt 1 à n);
Donc la formation 1 du matricule 'aaaaaaaaaa' n'est pas forcément la même la formation 1 du matricule 'bbbbbbbbbb', c'est juste que c'est sa première formation;

Voila, voila j'espere que j'ai été suffisament clair
0
ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 7
18 mai 2004 à 16:03
Ok, donc c'est bien une clé relative que tu veux faire : une formation depend uniquement d'une personne, son numero est unique pour cette personne. Donc plusieurs personnes ne peuvent pas faire la meme formation et pls formation peuvent avoir le meme identifiant.

Alors, oui maintenant ton code est bon car la cle primaire de la formation doit dependre de l'identifiant de celle-ci + la cle primaire de la personne.

Donc ca marche pour ce que tu veux faire :) Mais vraiment je te conseillerais de placer la colonne "num_form" avant "matricule" si tu veux avoir des requetes de selection propres.

Y a rien de plus con qu'un ordinateur. 
Louis Schuffenecker 
0
Yeah > ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004
18 mai 2004 à 16:10
Ok,
Je te remercie vraiment pour avoir passer du temps à m'aider, ca fait pas longtemps que j'utilise les forum mais c'est vraiment instructif et efficace.

Merci Ludvo
0
ludvo Messages postés 65 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 5 août 2004 7 > Yeah
18 mai 2004 à 16:31
De rien, on est là pour ca ;-)

Bon courage


Y a rien de plus con qu'un ordinateur. 
Louis Schuffenecker 
0