[Oracle] problème d'insertion dans une table
Yeah
-
ludvo Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
ludvo Messages postés 65 Date d'inscription Statut Membre Dernière intervention -
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
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:
- [Oracle] problème d'insertion dans une table
- Table ascii - Guide
- Insertion table des matières word - Guide
- Touche insertion clavier - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
4 réponses
En fait, dans ta 2eme serie tu utilises les meme cles primaires que la 1ere :
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
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
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)
)
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)
)
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 :
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
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
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 ?
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 ?
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
Il y a du choix :)
Y a rien de plus con qu'un ordinateur.
Louis Schuffenecker
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
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
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
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
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