Vous êtes sur la page 1sur 4

--exe 1 CREATE OR REPLACE FUNCTION f_salaire(v_nom in employee.nom%type) RETURN employee.salaire%type IS v_salaire employee.

salaire%type; begin select salaire into v_salaire from employee where nom =v_nom; return v_salaire; end; set serveroutput on begin dbms_output.put_line('le saliare trouv est ' f_salaire('douiji')); end; --insertion et creation create table employee(numemp number primary key,nom varchar(50),salaire number,p oste varchar(30),chef number constraint cd references employee, numdep number co nstraint cd2 references departement(numdep)); insert into employee VALUES(1,'BARTH Florent',13000,'CHEF DE PROJET',3,2); insert into employee VALUES(2,'CHBEIR Richard',21000,'CHERCHEUR',3,1); insert into employee VALUES(3,'NICOLLE Christophe',25000,'CHERCHEUR',null,1); insert insert insert insert insert insert into into into into into into employee employee employee employee employee employee VALUES(4, 'BLAKE John',8000,'DEVELOPPEUR',6,2); VALUES(5,'DUPONT Jean',9000,'DEVELOPPEUR',3,2); VALUES(6,'MARTIN Alexandre',10000,'COMPTABLE',3,3); VALUES(7,'RAY Benjamin',10000,'COMPTABLE',3,3); VALUES(8,'MILLER Pascal',9000,'DEVELOPPEUR',3,2); VALUES(9,'FORD John',30000,'DIRECTEUR',3,4);

create table departement(NUMDEP number constraint cd1 primary key,NOMDEP varchar (30),NOMLOC varchar(30)); insert into departement values(1,'RECHERCHE','DIJON'); insert into departement values(2,'DEVELOPPEMENT','NEW-YORK'); insert into departement values(3,'FACTURATION','PARIS'); insert into departement values(4,'DIRECTION','LONDRES'); ================================================================================ ========================================== --exe 1bis declare cursor cur is select * from employee; begin for l in cur loop dbms_output.put_line('le nom employee est ' l.nom ' le salaire est ' f_salai re(l.nom)); end loop; end; ================================================================================ ================================ --exe 2 CREATE OR REPLACE FUNCTION f_poste(v_nom in employee.nom%type) RETURN employee.poste%type IS v_poste employee.poste%type; begin select poste into v_poste from employee where nom =v_nom; return v_poste; end; /

set serveroutput on begin dbms_output.put_line('le poste trouv est ' f_poste('douiji')); end; / ================================================================================ =================================== --exe 3 create or replace function recherche(v_numemp in employee.numemp%type) return boolean is compt number; begin select count(*) into compt from employee where numemp=v_numemp; if compt=0 then return false; else return true; end if; end; / SET SERVEROUTPUT ON begin if recherche(&num) = true then dbms_output.put_line('employe trouve ' chr(2)); else dbms_output.put_line('employe non trouve ' chr(3)); end if; end; / ================================================================================ ===================================== --exe 4 create or replace procedure app_emp_dept (v_nomemp in employee.nom%type,v_nomde p in DEPARTEMENT.nomdep%type) is v_numdep departement.numdep%type; v_numemp employee.numemp%type; v_ndep employee.numdep%type; begin select numdep into v_numdep from departement where nomdep=v_nomdep; select numemp into v_numemp from employee where nom=v_nomemp; select numdep into v_ndep from employee where numemp=v_numemp; if v_ndep=v_numdep then dbms_output.put_line('l employee ' v_nomemp ' appartient au departement de ' v_nomdep); else dbms_output.put_line('l employee ' v_nomemp ' n appartient pas au departement de ' v_nomdep); end if; end; / set serveroutput on begin app_emp_dept('NICOLLE Christophe','RECHERCHE'); end; / ================================================================================ ===================================== --exercice 5 create or replace procedure maj_emp() is

declare cursor emp is select * from employee for update of salaire nowait; v_nomdep departement.nomdep%type; moyenne number; begin select avg(salaire) into moyenne from employee; for l in emp loop select nomdep into v_nomdep from departement where numdep=l.numdep; if v_nomdep ='RECHERCHE' THEN update employee set salaire =salaire-200 where current of emp; elsif v_nomdep ='DEVELOPPEMENT' THEN update employee SET salaire =salaire+40 where current of emp; elsif v_nomdep ='DIRECTION' then update employee SET SALAIRE =salaire*2 where current of emp; else update employee set salaire =moyenne where current of emp; end if; end loop; end; / begin maj_emp(); end; / ================================================================================ ==================================== --exercice 6 a revoir create or replace trigger trg_inser after insert on departement for each row begin update departement set nomdep = 'DEPT_' :new.nomdep where numemp = (:new.numemp); commit; end; / begin insert into departement values(5,'informatique','maldives'); end; ================================================================================ ==================================== --exercice 7 a revoir aussi create or replace trigger trg_inser after insert on departement for each row declare cursor dept is select * from ; begin for l in dept loop if l.nomloc <> :old.nomloc then dbms_output.put_line('erreur inserez la valeur de nomloc correctement'); rollback; end if

end loop; end; / ================================================================================ ==================================== --exrecice 8 CREATE SEQUENCE MONCOMPTEUR INCREMENT BY 1 START WITH 4; create or replace trigger trg_inc after insert on employee for each row declare CURSOR CUR IS SELECT * FROM DEPARTEMENT; begin for l in cur loop if l.nomdep='RECHERCHE' then update departement set l.nomdep='n importe qui'; end if; end loop; dbms_output.put_line('salut ' chr(5)); end; / ================================================================================ ==================================== --exercice 9 create or replace trigger trg_ajout before insert on employee for each row declare compt number; begin select count(*) into compt from departement where numdep =:new.numdep; if compt=0 then insert into departement values(:new.numdep,'non attribut',null); end if; end; /

Vous aimerez peut-être aussi