Table des matières

SGBD

TP de SGBD par Nacer Boudjlida

Corrigé

Bonjour,

ci-joints des éléments de corriger des TPs, essentiellement contraintes d'intégrité et droits d'accès, les TPs sur les transactions et sur le traitement des requêtes ne posant pas, à mon avis, de difficultés particulières. Pour le TP sur le traitement des requêtes, il s'agissait essentiellement d'interroger la plan_table et de voir 1) que des formes différentes de requêtes donnaient le même plan 2) que des informations sur les coûts n'apparaissent pas tant qu'on n'a pas collecté les statistiques (analyze table (ou index) XXX compute statistics)

N. Boudjlida PS: Les solutions proposées sont amplement “optimisables”

Fichier PDF

Corrigé du TP noté

create table avion as select * from nacerb.avion;
create table pilote as select * from nacerb.pilote;
create table vol as select * from nacerb.vol;

-- Contrainte facile trigger accepté
alter table pilote add constraint inf_50 check (prime <= 50);

-- Ajout de la prime
alter table pilote add primeincluse number(10,2);

-- Version simple
before insert or update of prime,salaire on pilote
for each row
begin
        :new.primeincluse := (:new.salaire*(:new.prime+100))/100;
end;
/

-- verion deux parties
create global temporary table prime_salaire_tmp (numPilote integer);
create or replace trigger prime_salaire
before insert or update of prime, salaire on pilote
for each row
begin
        insert into prime_salaire_tmp values (:new.numPil);
end;
/

create or replace trigger prime_salaire2
after insert or update of prime, salaire on pilote
begin
        update pilote set primeincluse=(salaire*(prime+100))/100 where numPil in (select numPilote from prime_salaire_tmp);
        delete from prime_salaire_tmp;
end;
/
      
-- version moche 
create or replace trigger prime_salaire
after insert or update of prime, salaire on pilote
begin 
        update pilote set primeincluse=(salaire*(prime+100))/100;
end;
/

-- Question 4
create view les_primes as select numPil, nomPil,prime from pilote;
    
-- Question 5

Select * from user_updatable_columns where table_name = 'LES_PRIMES';
OWNER			       TABLE_NAME		      COLUMN_NAME		     UPD INS DEL
------------------------------ ------------------------------ ------------------------------ --- --- ---
ETUDXXX 		       LES_PRIMES		      NUMPIL			     YES YES YES
ETUDXXX 		       LES_PRIMES		      NOMPIL			     YES YES YES
ETUDXXX 		       LES_PRIMES		      PRIME			     YES YES YES

-- vue updatable donc pas besoin de trigger.
update les_primes set prime = 30 where numPil=7;
-- commit; -- Mot magique
-- Si vous voulez absolument un trigger pour updater la prime de la vue
create or replace trigger v_primes_update instead of update on les_primes
for each row
begin 
        update pilote set prime=:new.prime where numpil=:new.numpil;
end ;
/

-- Question 6
-- d'après le cours c'est :
select table_name,privilege,grantor from user_tab_privs_recd;

Outil

Rlwrap permet d'ajouter l'historique et l'édition d'une ligne dans oracle.

lancer sql avec rlwrap sqlplus

rlwrap.gz