DrUiD
Messages postés7Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention28 mai 2004
-
24 mai 2004 à 15:54
slimane_gh -
9 janv. 2008 à 15:29
Bonjour :)
J ai une activité sql a présenter pour le bts dont le principe est la location de voiture... j ai beau regarder mon code je ne comprend pas ce qui cloche, j obtient tjrs ces 2 erreurs lorsque je rempli les tables:
ORA-02291: violation de contrainte (BOSS.SYS_C002060) d'intégrité - touche parent introuvable
ERREUR à la ligne 1 : ORA-00001: violation de contrainte unique (BOSS.SYS_C002036)
Voici mon code:
J execute cette 1ere partie en tant que system:
create tablespace CAR
datafile 'd:\BTS\CAR.ora' size 50 M;
drop profile patron CASCADE;
drop profile secretaire CASCADE;
drop profile chauffeur CASCADE;
create profile patron
limit idle_time 2
failed_login_attempts 2
sessions_per_user unlimited;
create profile secretaire
limit idle_time 2
failed_login_attempts 2
password_lock_time 3
sessions_per_user 2
connect_time 60;
create profile chauffeur
limit idle_time 2
failed_login_attempts 2
password_lock_time 3
sessions_per_user 1
connect_time 60;
drop user BOSS CASCADE;
drop user SEC_1;
drop user SEC_2;
drop user BLANC;
drop user NOIR;
drop user VERT;
drop user JAUNE;
drop user BLEU;
create user BOSS
identified by chef
default tablespace CAR
quota 10M on CAR
profile patron;
create user SEC_1
identified by secret1
default tablespace CAR
quota 10M on CAR
profile secretaire;
create user SEC_2
identified by secret2
default tablespace CAR
quota 10M on CAR
profile secretaire;
create user BLANC
identified by chauf1
default tablespace CAR
quota 1M on CAR
profile chauffeur;
create user NOIR
identified by chauf2
default tablespace CAR
quota 1M on CAR
profile chauffeur;
create user VERT
identified by chauf3
default tablespace CAR
quota 1M on CAR
profile chauffeur;
create user JAUNE
identified by chauf4
default tablespace CAR
quota 1M on CAR
profile chauffeur;
Ici je me deconnecte et utilise le compte boss pour creer remplir les tables et creer les roles:
drop table course;
drop table affectation;
drop table driver;
drop table voiture;
drop table type;
create table driver(nochauf number(5) primary key check (nochauf between 1 and 99999),
nom varchar2(35) not null,
adresse varchar2(35) not null,
sal number(8) not null check (sal between 1 and 30000),
comm number(8),
embauche date not null);
create table type(code_type varchar2(3) primary key,
nbplace number(3) not null,
design varchar2(50));
create table course(nocourse varchar2(6) primary key,
vildep varchar2(30) not null,
vilar varchar2(30) not null,
dep_h number(2) not null check (dep_h between 0 and 23),
dep_mn number(2) not null check (dep_mn between 0 and 59),
ar_h number(2) not null check (ar_h between 0 and 23),
ar_mn number(2) not null check (ar_mn between 0 and 59),
j_ar number(1) check (j_ar in (0,1)));
[g]insert into course values('AF1881','PARIS','CARCASSONNE',9,0,15,30,0);
insert into course values('AF1882','CARCASSONNE','NANTES',17,30,22,30,0);
insert into course values('AF1883','PARIS','CERGY',7,0,8,0,0);
insert into course values('AF1884','PARIS','QUIMPER',7,0,12,30,0);
insert into course values('AF1885','PARIS','LE MANS',7,0,10,0,0);
insert into course values('AF1886','LE MANS','PARIS',16,0,19,0,0);
insert into course values('AF1887','PARIS','ROUEN',7,0,8,30,0);
insert into driver values(81333,'FEDOI','PARIS',24000,0,'01/03/1992');
insert into driver values(81337,'DUVAL','CERGY',18000,5580,'12/03/1992');
insert into driver values(81338,'MARTIN','ORLY',15000,1600,'03/05/1992');
insert into driver values(81353,'ANDRE','IVRY',22000,0,'01/06/1996');
insert into driver values(81433,'BERGER','PALAISEAU',14000,7000,'02/03/1992');
insert into driver values(81393,'COLLET','PARIS',7000,21000,'01/05/1993');
insert into driver values(81833,'PIC','MASSY',25000,0,'01/03/1992');
insert into type values('v6D',3,'Diesel confort');
insert into type values('v6E',3,'Essence confort');
insert into type values('v1D',3,'Diesel économique');
insert into type values('f1D',7,'Monospace');
create table voiture(nuvoit number(2) primary key check (nuvoit between 1 and 99),
annserv number(4) not null check (annserv between 1980 and 2040),
modvoit varchar2(50),
kmcompt number(8),
code_type varchar2(3), foreign key(code_type) references type);
insert into voiture values(1,1988,'MERCEDES E220',223000,'v6d');
insert into voiture values(02,1990,'MERCEDES slk',13000,'v6e');
insert into voiture values(03,1995,'RENAULT LAGUNA',123000,'v1d');
insert into voiture values(04,1997,'RENAULT MEGANE',223000,'v6d');
insert into voiture values(05,1998,'VOLKSWAGEN CHARAL',323000,'f1d');
create table affectation(nocourse varchar2(6) not null,
date_course date not null,
nbpass number(3) not null,
nuvoit number(2),
nochauf number(5),
foreign key(nuvoit) references voiture,
foreign key(nochauf) references driver,
primary key (nocourse,date_course));
insert into affectation values('AF1881','01/01/1999',1,01,81333);
insert into affectation values('AF1881','01/01/1999',2,01,81333);
insert into affectation values('AF1881','01/01/1999',3,02,81337);
insert into affectation values('AF1881','01/01/1999',2,03,81353);
insert into affectation values('AF1881','01/01/1999',1,01,81433);[/g]
drop role chauffeur;
drop role secretaire;
create role secretaire;
create role chauffeur;
grant select, delete, update on boss.course to secretaire;
grant select, delete, update on boss.affectation to secretaire;
grant select, delete, update on boss.driver to secretaire;
grant select, delete, update on boss.voiture to secretaire;
grant select, delete, update on boss.type to secretaire;
grant select on boss.course to chauffeur;
grant select on boss.affectation to chauffeur;
grant select on boss.driver to chauffeur;
grant select on boss.voiture to chauffeur;
grant select on boss.type to chauffeur;
Le probleme se situe au moment ou je fait les inserts, ici en gras... Voici le log suite aux insert:
insert into voiture values(1,1988,'MERCEDES E220',223000,'v6d')
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002182) d'intégrité - touche
parent introuvable
insert into voiture values(02,1990,'MERCEDES slk',13000,'v6e')
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002182) d'intégrité - touche
parent introuvable
insert into voiture values(03,1995,'RENAULT LAGUNA',123000,'v1d')
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002182) d'intégrité - touche
parent introuvable
insert into voiture values(04,1997,'RENAULT MEGANE',223000,'v6d')
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002182) d'intégrité - touche
parent introuvable
insert into voiture values(05,1998,'VOLKSWAGEN CHARAL',323000,'f1d')
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002182) d'intégrité - touche
parent introuvable
Table créée.
insert into affectation values('AF1881','01/01/1999',1,01,81333)
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002187) d'intégrité - touche
parent introuvable
insert into affectation values('AF1881','01/01/1999',2,01,81333)
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002187) d'intégrité - touche
parent introuvable
insert into affectation values('AF1881','01/01/1999',3,02,81337)
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002187) d'intégrité - touche
parent introuvable
insert into affectation values('AF1881','01/01/1999',2,03,81353)
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002187) d'intégrité - touche
parent introuvable
insert into affectation values('AF1881','01/01/1999',1,01,81433)
*
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte (BOSS.SYS_C002187) d'intégrité - touche
parent introuvable
C'est normal qu'il y ait une erreur: au moment d'insérer des valeurs dans la table, n'oublie pas que les bases Oracle respectent la casse.
Ainsi, tu inseres des données dans la table 'type'. La premiere insertion contient par exemple 'v6D'.
Quand tu inseres des champs dans 'voiture', il y a une foreign_key. Le probleme c'est que tu rentres 'v6d' dans voiture alors que c'est 'v6D' dans 'type'. Il y a donc logiquement un probleme de foreign_key inexistante.
DrUiD
Messages postés7Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention28 mai 20041 25 mai 2004 à 10:34
yes je venais de me rendre compte de ca, c est corrigé et je n'ai plus d'erreurs! par contre ce qui me turlupine c'est que j'utilise la variable nocourse dans ma table affectation comme composante de la clé primaire mais c'est avant tout une clé étrangere car elle est clé primaire de la table course... cela ne devrait-il pas poser des problèmes a l'usage?
grrrr je hais le sql :/
je suis un debutant oracle quend j ai fait mon pratique en sql plus j ai stopé par cett erruer si il ya un qui m'aidé pour dépass cette problem repon moi je en attend
insert into employees (employee_id,first_name,last_name,email,phone_number,hire_date,job_id,salary,
commission_pct,manager_id,department_id)
values (50,'mallm','slimane','slimane_gh','213.709.264.55',sysdate,'ac_ce',6200,null,145,150);
ORA-02291: violation de contrainte (HR.EMP_JOB_FK) d'intégrité - touche parent introuvable
DrUiD
Messages postés7Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention28 mai 20041 25 mai 2004 à 10:18
bonjour Youssef :)
Je te remercie tu m as permis de régler une partie de mon problème :) Qu'il est frustrant de toujours se rendre compte que ca ne fonctionne a cause de petites erreurs comme celle ci :/
Je crois que je viens de trouver le reste du problème... je susi trop etourdit... t1 de copier/coller... grrrrrr :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Pas de pb!! J'ai assez galere plusieurs fois et il y a plein de gens sympa qui m'ont aide sur les forums alors c'est un juste retour des choses...
Encore une petite erreur d'inattention: dans la structure de la table 'affectation', tu indiques que la clé primare est le couple '(nocourse,date_course)'. Ce couple identifie donc chaque entree de cette table, et doit donc etre unique à chaque fois que tu inseres des valeurs dans la tables. Or quand tu fais tes 'insert', tu entres tjrs les memes valeurs: 'AF1881','01/01/1999'
Or tu peux le faire 1 fois (le couple n'existe pas au depart) mais pour les autres insertions ca ne marche pas car cet identifiant existe deja. C'est pour ca que ca ecrit "1 ligne créée" et qu'ensuite les 'insert' génères des erreurs.
Pour résumer: pour régler le problème il faut t'assurer que le couple formé par les deux premieres valeurs de ton 'insert' soit unique à chaque fois.
Si une des foreign_key est aussi une cle primaire d'une autre table, tu pourrais l'utiliser en tant que cle primaire dans la table affectation. Moi j'y vois pas trop de probleme, et ca simplifierait la cle primaire de la table (un champ plutot qu'un couple).
Si je vois autre chose je le dirai...c'est qd meme le matin la, fô se reveiller :o)
DrUiD
Messages postés7Date d'inscriptionlundi 24 mai 2004StatutMembreDernière intervention28 mai 20041 25 mai 2004 à 10:49
lol pas de problème je t'autorise a te reveiller tranquillement :p (joke) :p deja q tu fais raler mon collegue a coté qui galere avec un dns sous linux parceq tu m reponds en temps réel et que personne ne lui repond... &&
Par contre je ne susi pas sur que tu aies bien compries mon meli melo de clés primaires/clé etrangeres donc:
voici la declaration de ma table course:
create table course(nocourse varchar2(6) primary key,
vildep varchar2(30) not null,
vilar varchar2(30) not null,
dep_h number(2) not null check (dep_h between 0 and 23),
dep_mn number(2) not null check (dep_mn between 0 and 59),
ar_h number(2) not null check (ar_h between 0 and 23),
ar_mn number(2) not null check (ar_mn between 0 and 59),
j_ar number(1) check (j_ar in (0,1)));
et la declaration de ma table affectation:
create table affectation(nocourse varchar2(6) not null,
date_course date not null,
nbpass number(3) not null,
nuvoit number(2),
nochauf number(5),
foreign key(nuvoit) references voiture,
foreign key(nochauf) references driver,
primary key (nocourse,date_course));
J'ai essayé de declarer nocourse comme foreign key dans la table affectation mais ca ne semble pas vouloir marcher...
J'etais en train de regarder d'ou l'erreur pouvait provenir, mais comme t'as trouve, c'est cool! J'ai donc rien fait d'utile mais "de rien" quand meme :o)
Au fait tu peux donner le lien du pb de ton collegue ? Je m'y connais pas enormement en reseau sous linux mais j'ai quelques connaissances de base...