L'exemple suivant décrit le travail répertorié dans la table JOB_HISTORY était le travail de l'employé, mais également le travail auquel l'employé s'est rendu après la emploi répertorié dans la table JOB_HISTORY.
CREATE OR REPLACE PROCEDURE Promotion_Rev
IS
old_job hr.job_history.job_id%TYPE ;
new_job hr.job_history.job_id%TYPE ;
nincr NUMBER ;
CURSOR cselectjob
IS
SELECT employee_id,
start_date,
end_date,
job_id
FROM hr.job_history
ORDER BY employee_id, start_date;
TYPE jh_rec IS RECORD (
id_employé hr.job_history.employee_id%TYPE,
start_date hr.job_history.start_date%TYPE,
end_date hr.job_history.end_date%TYPE,
job_id hr .job_history.job_id%TYPE
);
TYPE jh_table EST UNE TABLE DE jh_rec
INDEX PAR PLS_INTEGER ;
jh_table_array jh_table;
COMMENCER
OUVRIR cselectjob;
FETCH cselectjob
BULK COLLECT INTO jh_table_array;
FERMER cselectjob ;
FOR counter IN jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST
THEN
nincr :=0;
ELSE
nincr :=1;
FIN SI;
old_job :=jh_table_array (compteur).job_id;
SI jh_table_array (compteur).employee_id =
jh_table_array (compteur + nincr).employee_id
ALORS
new_job :=jh_table_array (compteur + nincr).job_id;
SINON
SELECT job_id
INTO new_job
FROM hr.employees
WHERE hr.employees.employee_id =
jh_table_array (counter).employee_id;
END IF;
DBMS_OUTPUT.put_line( 'Employee '
|| jh_table_array (counter).employee_id
|| ' avait un emploi '
|| old_job
|| ' for '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' jours et déplacé vers le travail '
|| new_job
|| '.');
FIN BOUCLE;
FIN;
/
Exécutez la procédure suivante :
set serveroutput on;
BEGIN
promotion_rev;
END;
/
La sortie devrait ressembler à ceci :
L'employé 101 a occupé le poste AC_ACCOUNT pendant 1 497 jours et est passé au poste AC_MGR.
L'employé 101 a occupé le poste AC_MGR pendant 1 234 jours et est passé au poste AD_VP.
L'employé 102 a occupé le poste IT_PROG pendant 2018 jours et est passé au poste AD_VP.
L'employé 114 a occupé le poste ST_CLERK pendant 647 jours et est passé au poste PU_MAN.
L'employé 122 a occupé le poste ST_CLERK pendant 364 jours et a déménagé au poste ST_MAN.
L'employé 176 a occupé le poste SA_REP pendant 282 jours et a déménagé à l'emploi SA_MAN.
L'employé 176 a occupé l'emploi SA_MAN pendant 364 jours et est passé à l'emploi SA_REP.
L'employé 200 a occupé l'emploi AD_ASST pendant 2 100 jours et a été transféré à l'emploi AC_ACCOUNT.
L'employé 200 a occupé l'emploi AC_ACCOUNT pendant 1 644 jours et a été muté au poste AD_ASST.
L'employé 201 a occupé le poste MK_REP pendant 1 401 jours et a été muté au poste MK_REP.
Procédure PL/SQL terminée avec succès.