Ví dụ sau đây mô tả công việc được liệt kê trong bảng JOB_HISTORY là công việc mà nhân viên có nhưng cũng là công việc mà nhân viên đó đã làm sau khi công việc được liệt kê trong bảng JOB_HISTORY.
TẠO HOẶC THAY THẾ THỦ TỤC Promotion_Rev
IS
old_job hr.job_history.job_id% TYPE;
new_job hr.job_history.job_id% TYPE;
nincr NUMBER;
CURSOR cselectjob
LÀ
CHỌN worker_id,
start_date,
end_date,
job_id
FROM hr.job_history
ĐẶT HÀNG BỞI worker_id, start_date;
TYPE jh_rec LÀ GHI CHÚ (
worker_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 LÀ BẢNG CHỈ SỐ jh_rec
THEO PLS_INTEGER;
jh_table_array jh_table;
BEGIN
MỞ cselectjob;
TÌM KIẾM cselectjob
THU MUA SỐ LƯỢNG LỚN VÀO jh_table_array;
ĐÓNG 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;
HẾT NẾU;
old_job:=jh_table_array (bộ đếm) .job_id;
NẾU jh_table_array (counter) .employee_id =
jh_table_array (counter + nincr) .employee_id
THEN
new_job:=jh_table_array (counter + nincr) .job_id;
ELSE
CHỌN job_id
INTO new_job
FROM hr.employees
WHERE hr.employees.employee_id =
jh_table_array (counter) .employee_id;
HẾT IF;
DBMS_OUTPUT.put_line ('Nhân viên'
|| jh_table_array (bộ đếm) .employee_id
|| 'đã có việc làm'
|| old_job
|| 'cho'
| | (jh_table_array (counter) .end_date
- jh_table_array (counter) .start_date)
|| 'ngày và đã chuyển đến công việc'
|| new_job
|| '.');
HẾT LOOP;
HẾT;
/
Thực hiện quy trình sau:
đặt serveroutput on;
BEGIN
promotion_rev;
END;
/
Đầu ra sẽ có dạng như sau:
Nhân viên 101 đã có công việc AC_ACCOUNT trong 1497 ngày và chuyển sang công việc AC_MGR.
Nhân viên 101 đã có công việc AC_MGR trong 1234 ngày và chuyển sang công việc AD_VP.
Nhân viên 102 đã có công việc IT_PROG trong 2018 ngày và chuyển sang công việc AD_VP.
Nhân viên 114 có công việc ST_CLERK trong 647 ngày và chuyển sang công việc PU_MAN.
Nhân viên 122 có công việc ST_CLERK trong 364 ngày và chuyển sang công việc ST_MAN.
Nhân viên 176 có công việc SA_REP trong 282 ngày và đã chuyển đi đến công việc SA_MAN.
Nhân viên 176 có công việc SA_MAN trong 364 ngày và chuyển sang công việc SA_REP.
Nhân viên 200 đã có công việc AD_ASST trong 2100 ngày và chuyển sang công việc AC_ACCOUNT.
Nhân viên 200 đã có công việc AC_ACCOUNT cho 1644 ngày và chuyển sang công việc AD_ASST.
Nhân viên 201 có công việc MK_REP trong 1401 ngày và chuyển sang công việc MK_REP.
Thủ tục PL / SQL đã hoàn tất thành công.