Erreurs sql oracle ORA-02291 et ORA-00001

Fermé
DrUiD Messages postés 7 Date d'inscription lundi 24 mai 2004 Statut Membre Dernière intervention 28 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

Voila en esperant trouver la solution...

13 réponses

Salut,

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.

Dis-moi si ca repond a ton probleme.

A+, Youssef.
1