Académique Documents
Professionnel Documents
Culture Documents
89.45/100
drop table TP2_ENTREPRISE cascade constraints;
drop table TP2_PROJET cascade constraints;
drop table TP2_UTILISATEUR_PROJET cascade constraints;
drop table TP2_PROFIL_ACCESSIBILITE cascade constraints;
drop table TP2_PROFIL_ACCESSIBILITE_IMAGE cascade constraints;
drop table TP2_PROFIL_ACCESSIBILITE_IMAGE_COORDONNEE cascade constraints;
drop table TP2_PROFIL_ACCESSIBILITE_PLAN cascade constraints;
drop table TP2_PROFIL_ACCESSIBILITE_PLAN_COORDONNEE cascade constraints;
drop table TP2_SONDAGE cascade constraints;
drop table TP2_UTILISATEUR cascade constraints;
drop table TP2_TYPE_QUESTION cascade constraints;
drop table TP2_QUESTION cascade constraints;
drop table TP2_CHOIX_REPONSE cascade constraints;
drop table TP2_REPONSE_UTILISATEUR cascade constraints;
drop table TP2_QUESTION_ARCHIVE cascade constraints;
drop table TP2_CHOIX_REPONSE_ARCHIVE cascade constraints;
drop table TP2_SONDAGE_ARCHIVE cascade constraints;
drop sequence TP2_UTILISATEUR_SEQ;
drop sequence TP2_SONDAGE_SEQ;
drop sequence TP2_QUESTION_SEQ;
drop sequence TP2_CHOIX_REPONSE_SEQ;
/*1c*/
insert into TP2_PROFIL_ACCESSIBILITE_IMAGE(NO_PROFIL, HAUTEUR_IMA,
LARGEUR_IMA)
select NO_PROFIL, HAUTEUR_PLA, LARGEUR_PLA
from TP2_PROFIL_ACCESSIBILITE_PLAN
where NO_PROFIL = 12;
/*1e*/
update TP2_TYPE_QUESTION
set DESC_TYPE_QUE = 'Vrai ou Faux'
where CODE_TYPE_QUESTION = (select CODE_TYPE_QUESTION
from TP2_QUESTION
where ORDRE_QUESTION = 3 and
NO_SONDAGE = (select NO_SONDAGE
from TP2_SONDAGE
/*1f*/
select NOM_ENT, CODE_POSTAL_ENT
from TP2_ENTREPRISE
where NOM_ENT like '%centre%';
/*1g*/
select TEXTE_QUE, ORDRE_QUESTION
from TP2_QUESTION
where NO_SONDAGE in(select NO_SONDAGE
from TP2_SONDAGE
where DATE_CREATION_SON between
to_date('2023-09-01','RRRR-MM-DD') and to_date('2023-09-30','RRRR-MM-
DD'))
order by NO_SONDAGE asc, ORDRE_QUESTION asc;
/*1d*/
delete from TP2_REPONSE_UTILISATEUR RU
where exists ( select *
from TP2_REPONSE_UTILISATEUR RU
inner join TP2_CHOIX_REPONSE CR on
RU.ID_CHOIX_REPONSE = CR.ID_CHOIX_REPONSE
inner join TP2_QUESTION Q on CR.ID_QUESTION =
Q.ID_QUESTION
inner join TP2_SONDAGE S on Q.NO_SONDAGE =
S.NO_SONDAGE
where S.DATE_FIN_SON < sysdate - interval '6'
month);
/*1h)ii*/
select distinct TEXTE_REP
from TP2_REPONSE_UTILISATEUR RU join TP2_CHOIX_REPONSE CR
on RU.ID_CHOIX_REPONSE = CR.ID_CHOIX_REPONSE
join TP2_QUESTION Q on CR.ID_QUESTION = Q.ID_QUESTION
join TP2_TYPE_QUESTION TQ on Q.CODE_TYPE_QUESTION =
TQ.CODE_TYPE_QUESTION
where DESC_TYPE_QUE = 'À développement';
/*1h)iii*/
select distinct TEXTE_REP
from TP2_REPONSE_UTILISATEUR RU
where exists (select *
from TP2_CHOIX_REPONSE CR
where RU.ID_CHOIX_REPONSE = CR.ID_CHOIX_REPONSE
and
ID_QUESTION in (select ID_QUESTION
from TP2_QUESTION Q,
TP2_TYPE_QUESTION TQ
where Q.CODE_TYPE_QUESTION =
TQ.CODE_TYPE_QUESTION and
DESC_TYPE_QUE = 'À
développement'));
/*1i*/
select U.PRENOM_UTI ||' '|| U.NOM_UTI as NOM_UTILISATEUR, S.TITRE_SON,
count(RU.ID_CHOIX_REPONSE)
from TP2_UTILISATEUR U join TP2_REPONSE_UTILISATEUR RU on
U.NO_UTILISATEUR = RU.NO_UTILISATEUR
join TP2_CHOIX_REPONSE CR on RU.ID_CHOIX_REPONSE =
CR.ID_CHOIX_REPONSE
join TP2_QUESTION Q on CR.ID_QUESTION = Q.ID_QUESTION
join TP2_SONDAGE S on Q.NO_SONDAGE = S.NO_SONDAGE
group by U.NO_UTILISATEUR,U.PRENOM_UTI, U.NOM_UTI , S.TITRE_SON
order by count(RU.ID_CHOIX_REPONSE) desc;
/*1j)i*/
select NOM_ENT
from TP2_ENTREPRISE
where NO_ENTREPRISE not in (select NO_ENTREPRISE
from TP2_PROJET
group by NO_ENTREPRISE
having count(CODE_PROJET)=2);
/*1j)ii*/
select NOM_ENT
from TP2_ENTREPRISE minus
select NOM_ENT
from TP2_ENTREPRISE
where NO_ENTREPRISE in (select NO_ENTREPRISE
from TP2_PROJET
group by NO_ENTREPRISE
having count(CODE_PROJET)=2);
/*1j)iii*/
select NOM_ENT
from TP2_ENTREPRISE E
where not exists(select*
from TP2_PROJET P
where E.NO_ENTREPRISE = P.NO_ENTREPRISE
having count(CODE_PROJET)=2);
/*1k*/
select NOM_ENT
from TP2_ENTREPRISE
where NO_ENTREPRISE not in (select NO_ENTREPRISE
from TP2_PROJET
where DATE_PRO between to_date (sysdate-
365,'RRRR-MM-DD') and to_date (sysdate,'RRRR-MM-DD'))
order by NOM_ENT asc;
/*1l)i*/
select COURRIEL_UTI
from TP2_UTILISATEUR
intersect
select COURRIEL_ENT
from TP2_ENTREPRISE
where COURRIEL_ENT like '%.ca';
/*1l)ii*/
select COURRIEL_UTI
from TP2_UTILISATEUR U
where exists (select COURRIEL_ENT
from TP2_ENTREPRISE E
where E.COURRIEL_ENT = U.COURRIEL_UTI and
COURRIEL_ENT like '%.ca');
/*1l)iii*/
select COURRIEL_UTI
from TP2_UTILISATEUR
where COURRIEL_UTI in (select COURRIEL_ENT
from TP2_ENTREPRISE
where COURRIEL_ENT like '%.ca');
/*1m)i*/
create or replace view TP2_VUE_HIERACHIE_ENTREPRISE as
select substr(lpad (' ', LEVEL*2,'')||NOM_ENT, 1, 30) as ARBRE ,
CODE_POSTAL_ENT, VILLE_ENT,
substr(sys_connect_by_path (COURRIEL_ENT, '/'),1, 40) as CHEMIN,
level as NIVEAU
from TP2_ENTREPRISE
connect by prior NO_ENTREPRISE = NO_ENTREPRISE_DIRIGEANTE
start with NO_ENTREPRISE_DIRIGEANTE is null
with check option;
/*1m)ii*/
select * from TP2_VUE_HIERACHIE_ENTREPRISE;
/*1m)iii
non, il n'est pas possible de faire cette requête.
L'ajout d'enregistrement nécessite généralement d'interagir directement
avec la table plutôt qu'avec la vue,
et les vues hiérarchique peuvent introduire des complications lors de
l'insertion d'enregistrement.
Donc, il est recommandé d'utiliser d'autres méthodes pour ajouter des
données, telles que l'insertion directe dans la table*/
update TP2_TYPE_QUESTION
set DESC_TYPE_QUE = 'OUI ou NON'
where CODE_TYPE_QUESTION = 'Q002';
/*1n)iii on pourrait avoir le cas où une image deviendrait un plan de
profil d'accessibilité 15 dans ce cas on devra
juste copier les données du tuples correspondant*/
insert into TP2_PROFIL_ACCESSIBILITE_IMAGE
select * from TP2_PROFIL_ACCESSIBILITE_PLAN
where NO_PLAN = 15;
/*2a*/
create or replace trigger TP2_TRG_AUI_TP2_QUESTION
before after update or insert on TP2_QUESTION
for each row
declare
V_NB_QUESTION number(6);
begin
select count(ID_QUESTION) into V_NB_QUESTION
from TP2_QUESTION
where ORDRE_QUESTION = :new.ORDRE_QUESTION
and ID_QUESTION <> :new.ID_QUESTION;
if (V_NB_QUESTION > 0) then
raise_application_error(-20000,'traitement impossible car ordre
déjà existant');
end if;
end TP2_TRG_AUI_TP2_QUESTION;
/
/*2b*/
create table TP2_SONDAGE_ARCHIVE(NO_SONDAGE number(4) not null,
DATE_CREATION_SON date ,
DATE_DEBUT_SON date,
DATE_FIN_SON date,
TITRE_SON varchar2(100) not null,
CODE_PROJET char(4) not null,
constraint PK_TP2_SONDAGE_ARCHIVE primary key (NO_SONDAGE),
constraint AK_TP2_SONDAGE_ARCHIVE unique (TITRE_SON),
constraint FK_TP2_SONDAGE_ARCHIVE foreign key (CODE_PROJET)
references TP2_PROJET (CODE_PROJET));
begin
if(P_I_DATE_ARCHIVE <= to_date(sysdate -1095,'RRRR-MM-DD')) then
insert into TP2_SONDAGE_ARCHIVE
select *
from TP2_SONDAGE
where DATE_FIN_SON <= P_I_DATE_ARCHIVE;
end if;
exception
when TP2_E_EXCEPTION_ARCHIVAGE then
dbms_output.put_line('date non correspondante archivage
impossible');
end TP2_SP_ARCHIVER_SONDAGE;
/
/*2d il permet de faire en sorte que l'on ne puisse pas poser une même
question pour un même numéro de sondage*/
create or replace trigger TP2_TRG_AUI_TP2_QUESTION_POSEE
before update or insert on TP2_QUESTION
for each row
declare
V_MEME_QUESTION number(6);
begin
select count(TEXTE_QUE) into V_MEME_QUESTION
from TP2_QUESTION
where TEXTE_QUE = :new.TEXTE_QUE
and NO_SONDAGE = :new.NO_SONDAGE;
if (V_MEME_QUESTION > 0) then
raise_application_error(-20050,'impossible vous ne pouvez pas
insérer une même question pour un même sondage');
end if;
end TP2_TRG_AUI_TP2_QUESTION_POSEE;
/
/*3a)i&ii*/
create index IDX_NOM_PROJET on TP2_PROJET(NOM_PRO);
/* Cet index va ameliorer la performance sur la recherche d'un projet car
on pourrait juste se rappeler du nom plutot que du CODE*/
/*3a)ii)2) étant donné que MOBILI-T n'a pas besoin de conserver le nom
des utilisateurs on n'a pas besoin de
mettre des index sur le nom et prénom de l'utilisateur*/
/*3a)iii)1
situation1: la recherche des projets des entreprises:Mobili_T pourrait
fréquemment rechercher les projets associés aux entreprises ainsi
on pourrait créer un index sur le NO_ENTREPRISE dans la table
TP2_PROJET*/
create index IDX_NO_ENTREPRISE_PROJET on TP2_PROJET(NO_ENTREPRISE);
/*3b)i*/
/* Nous avons dénormalisé la table TP2_QUESTION en utilisant la méthode
7.2 de dénormalisation afin d'améliorer les recherches
dans la table TP2_QUESTION*/
/*3b)ii*/
/*creation d'une colonne afin de dénormaliser la table TP2_QUESTION*/
alter table TP2_QUESTION
add DESC_TYPE_QUE varchar2(40) null;
/*3b)iii*/
/*creation des triggers à fin de toujours respecter l'intégrité dans les
tables*/
create or replace trigger TP2_TRG_BU_QUESTION
before insert or update on TP2_QUESTION
for each row
declare
V_DESC_TYPE_QUE varchar2(40);
begin
select DESC_TYPE_QUE into V_DESC_TYPE_QUE
from TP2_TYPE_QUESTION
where CODE_TYPE_QUESTION = :new.CODE_TYPE_QUESTION;
:new.DESC_TYPE_QUE := V_DESC_TYPE_QUE;
end TP2_TRG_BU_QUESTION;
/
SP_ACTIVER_TRIGGER ('TP2_TRG_BU_QUESTION');
end TP2_TRG_BU_TYPE_QUESTION;
/