Compte rendu
Tâche 1: Un premier exemple
1)
2) L’erreur c’est qu’on a dépassé la capacite de stockage du type
NUMBER(4,2) car il est petit de contenir 115.00 de stockage NUMBER(5,2)
donc si on la change dans la procédure on va voir un succès.
Tache 2:
1)
CREATE TABLE TEMP (
PREMIER VARCHAR2(20),
DEUXIEME VARCHAR2(20),
TROISIEME VARCHAR2(100)
);
2.a)
DECLARE
v_last_name EMPLOYEES.last_name%TYPE;
v_job_id EMPLOYEES.job_id%TYPE;
BEGIN
SELECT last_name, job_id INTO v_last_name, v_job_id FROM EMPLOYEES
WHERE employee_id = 100;
INSERT INTO TEMP (PREMIER, DEUXIEME, TROISIEME)
VALUES ('100', v_last_name, v_job_id);
DBMS_OUTPUT.PUT_LINE('Données insérées dans TEMP');
END;
b-
le bloc insérera les mêmes données
pour employee_id = 100, quand vous
exécuterez millions fois car la table
récupère toujours les informations de
cet employé.
c-
tous les enregistrements sont
supprimés donc pour éviter cela on va mettre COMMIT a la fin des
instructions .
les enregistrements ne sont pas supprimés après COMMIT .
3)
DECLARE
v_id_man NUMBER(4);
v_nom_man VARCHAR2(10);
v_job_man VARCHAR2(10);
v_phone_man employees.phone_number%TYPE;
dept departments%ROWTYPE;
BEGIN
SELECT manager_id INTO v_id_man FROM departments
WHERE department_name LIKE 'Finance';
SELECT first_name, job_id, phone_number INTO v_nom_man, v_job_man,
v_phone_man
FROM employees
WHERE employee_id = v_id_man;
SELECT * INTO dept FROM departments WHERE department_name LIKE
'Finance';
INSERT INTO TEMP VALUES (v_phone_man, v_nom_man, v_job_man || '
dans le département : ' || dept.department_name);
END;
Tache 3 :
Declare
v_diff number;
v_startdate date:=to_date('11-JUN-01','DD-MON-YY');
v_enddate date:=to_date('4-Apr-06','DD-MON-YY');
begin
select max(salary)-min(salary) into v_diff
from employees where hire_date between v_startdate and
v_enddate;
dbms_output.put_line('la différence de salaire entre '|| v_startdate
||' and '||v_enddate|| ' est '||v_diff );
end;
Tache 4:
SET SERVEROUTPUT ON
ACCEPT LAST_NAME PROMPT 'ENTREZ LE NOM DE LA FAMILLE DE
L EMPLOYEE:';
DECLARE
v_first_name EMPLOYEES.FIRST_NAME%TYPE;
v_last_name EMPLOYEES.LAST_NAME%TYPE ;
v_job_title JOBS.JOB_TITLE%TYPE;
v_department_name DEPARTMENTS.DEPARTMENT_NAME%TYPE;
v_salary EMPLOYEES.SALARY%TYPE;
BEGIN
v_last_name:='&LAST_NAME';
SELECT
EMP.FIRST_NAME,JO.JOB_TITLE ,DEP.DEPARTMENT_NAME,EMP.SALA
RY INTO v_first_name,v_job_title,v_department_name,v_salary
FROM EMPLOYEES EMP, JOBS JO, DEPARTMENTS DEP
WHERE EMP.JOB_ID=JO.JOB_ID AND
EMP.DEPARTMENT_ID=DEP.DEPARTMENT_ID AND
LOWER(LAST_NAME) LIKE LOWER(v_last_name);
DBMS_OUTPUT.PUT_LINE (v_last_name||' ' ||v_first_name|| ' EST UN
' ||v_job_title|| ',IL TRAVAILLE DANS LE DÉPARTEMENT ' ||
v_department_name|| ' ET GAGNE ' ||v_salary|| 'MAD');
END;
Tache 5:
1)
ACCEPT A PROMPT 'ENTRER A : ';
ACCEPT B PROMPT 'ENTRER B : ';
DECLARE
A NUMBER (10):='&A';
B NUMBER (10):='&B';
BEGIN
IF (B<A) THEN
DBMS_OUTPUT.PUT_LINE(B||' '||A);
ELSE
DBMS_OUTPUT.PUT_LINE(A||' '||B);
END IF;
END;
2)
DECLARE
V_GRADE NUMBER:=&V;
BEGIN
IF V_GRADE BETWEEN 80 AND 100 THEN
DBMS_OUTPUT.PUT_LINE('GRADE A');
ELSIF V_GRADE BETWEEN 60 AND 79 THEN
DBMS_OUTPUT.PUT_LINE('GRADE B');
ELSIF V_GRADE BETWEEN 59 AND 40 THEN
DBMS_OUTPUT.PUT_LINE('GRADE C');
ELSIF V_GRADE BETWEEN 20 AND 39 THEN
DBMS_OUTPUT.PUT_LINE('GRADE D');
ELSIF V_GRADE < 20 THEN
DBMS_OUTPUT.PUT_LINE('GRADE E');
ELSE DBMS_OUTPUT.PUT_LINE('HORS CLASSE');
END IF;
END;
Avec ‘ case’:
DECLARE
B_GRADE NUMBER(10);
BEGIN
B_GRADE:=&V;
CASE
WHEN B_GRADE BETWEEN 80 AND 100 THEN
DBMS_OUTPUT.PUT_LINE('GRADE A');
WHEN B_GRADE BETWEEN 60 AND 79 THEN
DBMS_OUTPUT.PUT_LINE('GRADE B');
WHEN B_GRADE BETWEEN 59 AND 40 THEN
DBMS_OUTPUT.PUT_LINE('GRADE C');
WHEN B_GRADE BETWEEN 20 AND 39 THEN
DBMS_OUTPUT.PUT_LINE('GRADE D');
WHEN B_GRADE < 20 THEN DBMS_OUTPUT.PUT_LINE('GRADE E');
ELSE DBMS_OUTPUT.PUT_LINE('HORS CLASSE');
END CASE;
END ;
Tache 6:
1)
BEGIN
FOR COUNTEUR IN 1..14 LOOP
IF MOD(COUNTEUR,3)=0 THEN
DBMS_OUTPUT.PUT_LINE('LA VALEUR DE COUNTEUR DIVISIBLE
PAR 3 EST: '||COUNTEUR);
END IF;
END LOOP;
END;
2)
BEGIN
FOR COUNTEUR IN 1..14 LOOP
IF MOD(COUNTEUR,3)=0 THEN
DBMS_OUTPUT.PUT_LINE('LA VALEUR DE COUNTEUR DIVISIBLE
PAR 3 EST : '||COUNTEUR);
ELSE
DBMS_OUTPUT.PUT_LINE('LA VALEUR DE COUNTEUR INDIVISIBLE
PAR 3 EST:'||COUNTEUR);
END IF;
END LOOP;
END;
3)
a- create table mop (N NUMBER(3));
b-
SET SERVEROUTPUT ON;
DECLARE
V_VAL MOP.N%TYPE;
I NUMBER;
BEGIN
I:=1;
WHILE I<=6 LOOP
V_VAL:=I*100;
INSERT INTO MOP VALUES(V_VAL);
I:=I+1;
END LOOP;
END;
c-
d-
e-
f-
Tous les lignes sont annulées .
Il faut ajouter un COMMIT.
SET SERVEROUTPUT ON;
ACCEPT A PROMPT 'ENTRER LA VALEUR DE A : ';
ACCEPT B PROMPT 'ENTRER LA VALEUR DE B : ';
DECLARE
A NUMBER (10):='&A';
B NUMBER (10):='&B';
TMP NUMBER (10) ;
BEGIN
WHILE MOD(A,B)!=0 LOOP
TMP:=MOD(A,B);
B:=A;
A:=TMP;
END LOOP;
DBMS_OUTPUT.PUT_LINE('PGCD (A,B) EST ' ||A);
END;