TP2 PLSQL
Exercice1
Créez un bloc PL/SQL qui déclare le curseur EMP_CUR et permet de sélectionner le nom, le
salaire et la date d'embauche d'un employé, à partir de la table EMP. Traitez chaque ligne à
partir du curseur ; si le salaire est supérieur à 15 000 et que la date d'embauche est postérieure
à 01-FEB-1988, affichez le nom, le salaire et la date d'embauche de l'employé dans la fenêtre.
Exercice2
Créez un bloc PL/SQL permettant d'extraire, à partir de la table EMP, le nom de famille et le
numéro de département de chaque employé possédant une valeur EMPNO inférieure à 114. A
l'aide des valeurs extraites de la table EMP, remplissez deux tables PL/SQL, la première avec
les enregistrements correspondant aux noms de famille des employés et la deuxième avec leur
numéro de département. En utilisant une boucle, extrayez à partir des tables PL/SQL, les
informations relatives au nom et au numéro de département de chaque employé ; affichez
ensuite les résultats dans une fenêtre grâce à DBMS_OUTPUT.PUT_LINE. Procédez de la
sorte pour les 15 premiers employés contenus dans les tables PL/SQL.
Correction TP2 PLSQL
Exercice1
SET SERVEROUTPUT ON
DECLARE
CURSOR EMP_CUR IS
SELECT last_name,salary,hire_date FROM EMPLOYEES;
V_ENAME VARCHAR2(25);
V_SAL NUMBER(7,2);
V_HIREDATE DATE;
BEGIN
OPEN EMP_CUR;
FETCH EMP_CUR INTO V_ENAME,V_SAL,V_HIREDATE;
WHILE EMP_CUR%FOUND
LOOP
IF V_SAL > 15000 AND V_HIREDATE >= TO_DATE('01-FEB-1988','DD-MON-YYYY') THEN
DBMS_OUTPUT.PUT_LINE (V_ENAME || ' earns ' || TO_CHAR(V_SAL)|| ' and joined the
organization on ' || TO_DATE(V_HIREDATE,'DD-Mon-YYYY'));
END IF;
FETCH EMP_CUR INTO V_ENAME,V_SAL,V_HIREDATE;
END LOOP;
CLOSE EMP_CUR;
END;
SET SERVEROUTPUT OFF
Exercice2
SET SERVEROUTPUT ON
DECLARE
TYPE Table_Ename is table of employees.last_name%TYPE
INDEX BY BINARY_INTEGER;
TYPE Table_dept is table of employees.department_id%TYPE
INDEX BY BINARY_INTEGER;
V_Tename Table_Ename;
V_Tdept Table_dept;
i BINARY_INTEGER :=0;
CURSOR C_Namedept IS SELECT last_name,department_id from employees
WHERE employee_id < 115;
V_COUNT NUMBER := 15;
BEGIN
FOR emprec in C_Namedept
LOOP
i := i +1;
V_Tename(i) := emprec.last_name;
V_Tdept(i) := emprec.department_id;
END LOOP;
FOR i IN 1..v_count
LOOP
DBMS_OUTPUT.PUT_LINE ('Employee Name: ' || V_Tename(i) ||
' Department_id: ' || V_Tdept(i));
END LOOP;
END;
/
SET SERVEROUTPUT OFF