# L3BD - Groupe 3 - TD11 - 06-04-21 # ```sql= /*1.a*/ create or replace view vue_village_sans_sejour as SELECT * FROM village WHERE village.idv NOT IN(SELECT idv FROM sejour); /*1.b*/ select * from village; select * from sejour; select * from vue_village_sans_sejour; /* 2. */ select table_name from user_tables; select view_name from user_views; desc sejour; select sequence_name from user_sequences; select distinct name, type from user_source; select text from user_source where name = 'traitement2' and type = 'PROCEDURE'; /*code source procedure traitement 2*/ /*3. traitement2*/ -- traitement 2 : create or replace procedure traitement2( l_idc client.idc%type, la_ville village.ville%type, le_jour sejour.jour%type, l_idv out village.idv%type, l_ids out sejour.ids%type, l_activite out village.activite%type) is cursor c is select idv, prix, activite from village where ville = la_ville order by prix desc; le_prix village.prix%type; begin open c; fetch c into l_idv, le_prix, l_activite; if c%found then l_ids := seq_sejour.nextval; insert into sejour values(l_ids, l_idc, l_idv, le_jour); update client set avoir = avoir - le_prix where idc = l_idc; else l_idv := -1; l_ids := -1; l_activite := 'neant'; end if; end; / /*pseudo code separation village*/ create or replace table nom_village ( idv int primary key, ville varchar2(12) ) create or replace table act_village ( idv int ,foreign key (idv) references nom_village, activite varchar2(10), prix int, capacite int ) insert into nom_village (idv,ville) select idv, ville from village; insert into act_village (idv,activite,prix,capacite) select idv, activite,prix,capacite from village; /* verification SPI : les 2 select doivent avoir le meme resultat */ select * from village; select n.idv,ville,activite,prix,capacite from nom_village n, act_village a where a.idv=n.idv; /*remplir les tables nom_village et act_village avec village*/ select idv, prix, activite from village; /*tester si les deux requetes donne le même resultat*/ select idv, prix, activite from nom_village as v, act_village as a where a.idv = v.idv; drop table village; /*maintenant la requete de traitement2 ne marche plus*/ select idv, prix, activite from village; create or replace view view_village as select v.idv,prix,activite from nom_village as v, act_village as v2 where v.idv = v2.idv order by v2.prix desc; /*la vue permet donc de modifier les tables nom_village,act_village mais */ select * from view_village; ```