Det følgende eksempel beskriver jobbet, der er angivet i JOB_HISTORY-tabellen, var det job, medarbejderen havde, men også det job, medarbejderen gik til efter job angivet i JOB_HISTORY-tabellen.
OPRET ELLER ERSTAT 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 ansat_id,
start_date,
end_date,
job_id
FRA hr.job_history
BESTIL EFTER medarbejder_id, startdato;
TYPE jh_rec ER REKORD (
ansat_id 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 ER TABEL OVER jh_rec
INDEX BY PLS_INTEGER;
jh_table_array jh_table;
BEGIN
OPEN cselectjob;
FETCH cselectjob
BULK SAMLING I jh_table_array;
LUK cselectjob;
FOR tæller I jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST
SÅ
nincr :=0;
ELSE
nincr :=1;
SLUT HVIS;
old_job :=jh_table_array (tæller).job_id;
HVIS jh_table_array (counter) VÆLG job_id
INTO new_job
FRA hr.employees
HVOR hr.employees.employee_id =
jh_table_array (counter).employee_id;
END IF;
DBMS_OUTPUT.put_line( 'Medarbejder '
|| jh_table_array (counter).employee_id
|| ' havde job '
|| old_job
|| ' for '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' dage og flyttet til jobbet '
|| new_job
|| '.');
END LOOP;
END;
/
Udfør følgende procedure:
sæt serveroutput til;
BEGIN
promotion_rev;
END;
/
Outputtet skulle komme nogenlunde sådan her:
Medarbejder 101 havde job AC_ACCOUNT i 1497 dage og flyttede til job AC_MGR.
Medarbejder 101 havde job AC_MGR i 1234 dage og flyttede til job AD_VP.
Medarbejder 102 havde job IT_PROG i 2018 dage og flyttede til job AD_VP.
Medarbejder 114 havde job ST_CLERK i 647 dage og flyttede til job PU_MAN.
Medarbejder 122 havde job ST_CLERK i 364 dage og flyttede til job ST_MAN.
Medarbejder 176 havde job SA_REP i 282 dage og flyttede til job SA_MAN.
Medarbejder 176 havde job SA_MAN i 364 dage og flyttede til job SA_REP.
Medarbejder 200 havde job AD_ASST i 2100 dage og flyttede til job AC_ACCOUNT.
Medarbejder 200 havde job AC_ACCOUNT for 1644 dage og flyttede til job AD_ASST.
Medarbejder 201 havde job MK_REP i 1401 dage og flyttede til job MK_REP.
PL/SQL-procedure gennemført.