Contoh berikut menjelaskan pekerjaan yang tercantum dalam tabel JOB_HISTORY adalah pekerjaan yang dimiliki karyawan tetapi juga pekerjaan yang dilakukan karyawan setelah pekerjaan yang tercantum dalam tabel JOB_HISTORY.
PROSEDUR BUAT ATAU GANTI Promotion_Rev
IS
pekerjaan_lama hr.job_history.job_id%TYPE;
jam_pekerjaan baru.job_history.job_id%TYPE;
nincr NUMBER;
KURSOR cselectjob
IS
SELECT employee_id,
start_date,
end_date,
job_id
FROM hr.job_history
ORDER BY employee_id, start_date;
TYPE jh_rec ADALAH REKAM (
employee_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 ADALAH TABEL jh_rec
INDEX OLEH PLS_INTEGER;
jh_table_array jh_table;
BEGIN
BUKA cselectjob;
FETCH cselectjob
KUMPULKAN MASSAL KE jh_table_array;
TUTUP cselectjob;
UNTUK pencacah DI jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST
THEN
nincr :=0;
ELSE
nincr :=1;
SELESAI JIKA;
old_job :=jh_table_array (penghitung).job_id;
JIKA jh_table_array (counter).employee_id =
jh_table_array (counter + nincr).employee_id
MAKA
new_job :=jh_table_array (counter + nincr).job_id;
ELSE
PILIH job_id
INTO new_job
DARI hr.employees
WHERE hr.employees.employee_id =
jh_table_array (counter).employee_id;
END IF;
DBMS_OUTPUT.put_line( 'Karyawan '
|| jh_table_array (counter).employee_id
|| ' punya pekerjaan '
|| old_job
|| ' untuk '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' hari dan pindah ke pekerjaan '
|| new_job
|| '.');
END LOOP;
END;
/
Jalankan prosedur berikut:
setel serveroutput on;
BEGIN
promotion_rev;
END;
/
Outputnya akan seperti ini:
Karyawan 101 memiliki pekerjaan AC_ACCOUNT selama 1497 hari dan pindah ke pekerjaan AC_MGR.
Karyawan 101 memiliki pekerjaan AC_MGR selama 1234 hari dan pindah ke pekerjaan AD_VP.
Karyawan 102 memiliki pekerjaan IT_PROG selama 2018 hari dan pindah ke pekerjaan AD_VP.
Karyawan 114 memiliki pekerjaan ST_CLERK selama 647 hari dan pindah ke pekerjaan PU_MAN.
Pegawai 122 memiliki pekerjaan ST_CLERK selama 364 hari dan pindah ke pekerjaan ST_MAN.
Pegawai 176 memiliki pekerjaan SA_REP selama 282 hari dan pindah ke pekerjaan SA_MAN.
Karyawan 176 memiliki pekerjaan SA_MAN selama 364 hari dan pindah ke pekerjaan SA_REP.
Karyawan 200 memiliki pekerjaan AD_ASST selama 2100 hari dan pindah ke pekerjaan AC_ACCOUNT.
Karyawan 200 memiliki pekerjaan AC_ACCOUNT untuk 1644 hari dan pindah ke pekerjaan AD_ASST.
Karyawan 201 memiliki pekerjaan MK_REP selama 1401 hari dan pindah ke pekerjaan MK_REP.
Prosedur PL/SQL berhasil diselesaikan.