- Créez une vue V_EMP contenant : le matricule, le nom, le numéro de département, la somme de la commission et du salaire baptisée GAINS, le lieu du département.
- Sélectionnez les lignes de V_EMP dont le salaire total est supérieur à 10.000 F
- Essayez de mettre à jour le nom de l'employé MARTIN à travers la vue V_EMP.
- Créez une vue VEMP10 qui ne contienne que les employés du département 10 de la table EMP (n'utilisez pas l'option CHECK pour cette création). Insérez dans cette vue un employé SOULIER qui appartient au département 20.
- Détruisez cette vue VEMP10 et recréez-la avec l'option CHECK.
- Essayez d'insérer un employé BALARD pour le département 30. Que se passe-t-il ? Essayez de modifier le département d'un employé visualisé à l'aide de cette vue.
- Liste des salaires des employés avec le pourcentage par rapport au total des salaires de leur département (utilisez une vue qui fournira le total des salaires). Vous pourrez chercher une autre solution qui n'utilise pas de vue mais un select emboîté dans le from.
Essayez ensuite de retrouver cet employé au moyen de la vue VEMP10 puis au moyen de la table EMP.
---------------------------------
corrogier
create view v_emp (matr, nom, dept, GAINS, lieu) as
select matr, nome, emp.dept, sal + nvl(comm,0), lieu
from emp,dept
where emp.dept = dept.dept;select * from v_emp where SALTOT > 10000;
update v_emp set nome = 'TOTO' where nome = 'MARTIN';
-----
create view vemp10 as select * from emp where dept=10;
insert into vemp10 values
(1117, 'SOULIER', 'RANGER', 7839, '18/05/81', 10000, 300, 20);
drop view vemp10;
create view VEMP10 as select * from emp
where dept = 10 with check option;
insert into vemp10 values
(0007, 'BALARD', 'OUVRIER', 7839, '18-MAY-81', 10000, 300, 20);
ORA-01402: view WITH CHECK OPTION where-clause violation
update vemp10 set dept=20 where nome='LESAGE';
On ne peut pas non plus utiliser update pour la meme raison.
-----
create view vt (dept, total) as
select dept, sum(sal+nvl(comm,0)) from emp group by dept;
select nome, sal+nvl(comm,0) salaire, (sal+nvl(comm,0))/total pourcentage
from vt,emp
where vt.dept=emp.dept;
Avec les nouvelles possibilités offertes par SQL (select emboîté dans la clause from) on peut se passer de la création d'une vue:
select nome, sal+nvl(comm,0) salaire, round((sal+nvl(comm,0))/total*100) pourcentage, emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept;
Si on veut bien utiliser les facilités offertes par SQL*PLUS(pas dans SQL) :
break on dept skip 1
compute sum of salaire on dept
column pourcentage format a7
select nome, sal+nvl(comm,0) salaire,
to_char(round((sal+nvl(comm,0))/total*100), '999')||' %' pourcentage, emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept
order by 4;
select matr, nome, emp.dept, sal + nvl(comm,0), lieu
from emp,dept
where emp.dept = dept.dept;select * from v_emp where SALTOT > 10000;
update v_emp set nome = 'TOTO' where nome = 'MARTIN';
-----
create view vemp10 as select * from emp where dept=10;
insert into vemp10 values
(1117, 'SOULIER', 'RANGER', 7839, '18/05/81', 10000, 300, 20);
drop view vemp10;
create view VEMP10 as select * from emp
where dept = 10 with check option;
insert into vemp10 values
(0007, 'BALARD', 'OUVRIER', 7839, '18-MAY-81', 10000, 300, 20);
ORA-01402: view WITH CHECK OPTION where-clause violation
update vemp10 set dept=20 where nome='LESAGE';
On ne peut pas non plus utiliser update pour la meme raison.
-----
create view vt (dept, total) as
select dept, sum(sal+nvl(comm,0)) from emp group by dept;
select nome, sal+nvl(comm,0) salaire, (sal+nvl(comm,0))/total pourcentage
from vt,emp
where vt.dept=emp.dept;
Avec les nouvelles possibilités offertes par SQL (select emboîté dans la clause from) on peut se passer de la création d'une vue:
select nome, sal+nvl(comm,0) salaire, round((sal+nvl(comm,0))/total*100) pourcentage, emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept;
Si on veut bien utiliser les facilités offertes par SQL*PLUS(pas dans SQL) :
break on dept skip 1
compute sum of salaire on dept
column pourcentage format a7
select nome, sal+nvl(comm,0) salaire,
to_char(round((sal+nvl(comm,0))/total*100), '999')||' %' pourcentage, emp.dept
from emp, (select dept, sum(sal+nvl(comm,0)) total from emp group bydept) e1
where e1.dept = emp.dept
order by 4;