Untitled

                Never    
SQL
       
create table fournisseur (
	numfour NUMBER(10) primary key,
	nomfour VARCHAR2(20) not null);

create table client (
	numclient NUMBER(10) primary key,
	nomclt VARCHAR2(20) not null,
	adresse VARCHAR2(40),
	numtel CHAR(14));

create table article (
	numart NUMBER(10) primary key,
	libelle VARCHAR2(20),
	numfour NUMBER(10) references fournisseur(numfour));

create table commande (
	numart NUMBER(10) constraint CE_Article references article(numart),
	numclient NUMBER(10) constraint CE_Client references client(numclient),
	quantite NUMBER(10) constraint CK_Quantite CHECK (quantite > 0) not null,
	constraint CP_Commande primary key(numart, numclient));




/* ----------------- INSERTION : fournisseur ----------------- */

insert into fournisseur values (1, 'Magouille');
insert into fournisseur values (2, 'Rigolo');
insert into fournisseur values (3, 'Sympa');
insert into fournisseur values (4, 'Chouette');

/* ----------------- INSERTION : client ----------------- */

insert into client values (10, 'Piscou', 'Nice', null);
insert into client values (40, 'Dingo', 'Clermont-Ferrand', '04-73-42-58-12');
insert into client values (15, 'Picsou', 'Nantes', '02-40-12-15-65');
insert into client values (55, 'Mickey', 'Brest', '02-51-24-52-87');

/* ----------------- INSERTION : article ----------------- */

insert into article values (1, 'Pomme', 3);
insert into article values (2, 'Poire', 3);
insert into article values (3, 'Fraise', 1);
insert into article values (4, 'Prune', 2);

/* ----------------- INSERTION : commande ----------------- */

insert into commande values (1, 15, 10);
insert into commande values (3, 40, 35);
insert into commande values (2, 40, 42);
insert into commande values (3, 15, 12);
insert into commande values (2, 55, 80);
insert into commande values (1, 10, 60);



/*--------------- Q3 ----------------*/

insert into article values (1, 'Pomme', 4);

/*
	ERROR at line 1:
	ORA-00001: unique constraint (OPS$BD63.SYS_C00154013) violated

	Il ne peut y avoir qu'un seul tuple avec la clé primaire numart = 1
*/


/*--------------- Q4 ----------------*/

insert into commande values (1, 55, 0);

/*
	ERROR at line 1:
	ORA-02290: check constraint (OPS$BD63.SYS_C00154022) violated

	On ne peut pas insérer ce tuble car la quantité doit être supérieure à 0
*/
	

/*--------------- Q5 ----------------*/

insert into commande values (1, 55, null);

/*
	ERROR at line 1:
	ORA-01400: cannot insert NULL into ("OPS$BD63"."COMMANDE"."QUANTITE")

	On ne peut pas insérer ce tuble car la quantité est un attribut obligatoire
    il doit y avoir une valeur 
*/

/*--------------- Q6 ----------------*/

commit;

update client 
set adresse = 'Bordeaux'
where numclient = 10;

/*--------------- Q7 ----------------*/

insert into fournisseur values (5, 'Relax');
insert into fournisseur values (6, 'Pointu');
insert into fournisseur values (7, 'Odieux');

rollback;

/*--------------- Q8 ----------------*/

delete from client where numclient = 15;

/*
	ERROR at line 1:
	ORA-02292: integrity constraint (OPS$BD63.SYS_C00154025) violated - child record foun

	On ne peut pas supprimer ce tuble car le numclient est une clée étrangère pour la table
	commande
*/

/*--------------- Q9 ----------------*/

alter table commande drop constraint CE_Client;

alter table commande add constraint pk_numclt foreign key (numclient) references client(numclient) on delete cascade;

/*--------------- Q10 ----------------*/

alter table fournisseur add (numtel CHAR(14));

/* 
	Tous les fournisseurs ont maintenant un attribut numtel
*/

/*--------------- Q11 ----------------*/

update fournisseur set nomfour = substr(nomfour, 1, 6);

alter table fournisseur modify (nomfour VARCHAR2(6));

/*--------------- Q12 ----------------*/

select constraint_name from user_constraints where table_name = 'COMMANDE';

/*--------------- Q13 ----------------*/

create view LIVRAISON as
select nomclt, libelle, quantite
from CLIENT natural join (COMMANDE natural join ARTICLE)
where NumTel is not NULL;

/*--------------- Q14 ----------------*/

drop table FOURNISSEUR;
/* Impossible de supprimer la table FOURNISSEUR car ARTICLE(NomFour)*/
/* est une clé étrangère référançant la clé primaire                */
/* FOURNISSEUR(NomFour)                                             */

drop table FOURNISSEUR cascade constraints;

/*--------------- Q15 ----------------*/

delete from COMMANDE;

select count(*) "NB DE LIGNES"
from COMMANDE;

/*--------------- Q16 ----------------*/

drop table COMMANDE cascade constraints;

select TABLE_TYPE
from USER_CATALOG
where TABLE_NAME='COMMANDE';

/*--------------- Q17 ----------------*/

drop view  LIVRAISON cascade constraints;
drop table CLIENT cascade constraints;
drop table ARTICLE cascade constraints;