Следният пример описва заданието, посочено в таблицата JOB_HISTORY, е работата, която служителят е имал, но също и работата, на която служителят е отишъл след задание, посочено в таблицата JOB_HISTORY.
СЪЗДАДЕТЕ ИЛИ ЗАМЕНЕТЕ ПРОЦЕДУРА Promotion_Rev
Е
old_job hr.job_history.job_id%TYPE;
new_job hr.job_history.job_id%TYPE;
nincr NUMBER;
CURSOR cselectjob
IS
ИЗБЕРЕТЕ идентификатор_на_служител,
начална_дата,
крайна_дата,
job_id
ОТ hr.job_history
ПОРЪЧАЙТЕ ПО ИД_служител, начална_дата;
TYPE jh_rec Е RECORD (
employee_id hr.job_history.employee_id%TYPE,
start_date hr.job_history.start_date%TYPE,
end_date hr.job_history.end_date% job_,
.job_history.job_id%TYPE
);
TYPE jh_table Е ТАБЛИЦА НА jh_rec
ИНДЕКС ОТ PLS_INTEGER;
jh_table_array jh_table;
BEGIN
ОТВОРЕТЕ cselectjob;
ВЗЕМЕТЕ cselectjob
ОБЕТО СЪБИРАНЕ В jh_table_array;
ЗАТВОРИ cselectjob;
FOR брояч В jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST
THEN
nincr :=0;
ELSE
nincr :=1;
КРАЙ АКО;
old_job :=jh_table_array (counter).job_id;
IF jh_table_array (counter).employee_id =
jh_table_array (counter + nincr).employee_id
THEN
new_job :=jh_table_array (counter + nincr).job_id;
ELSE
ИЗБЕРЕТЕ 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( 'Служител '
|| jh_table_array (counter).employee_id
|| ' имаше работа '
|| old_job
|| ' за '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' дни и се премести на работа '
|| new_job
|| '.');
КРАЙ НА ПРИМКА;
КРАЙ;
/
Изпълнете следната процедура:
задайте изход на сървъра;
BEGIN
promote_rev;
END;
/
Изходът трябва да дойде нещо подобно:
Служител 101 е имал работа AC_ACCOUNT за 1497 дни и е преместен на работа AC_MGR.
Служител 101 е имал работа AC_MGR за 1234 дни и се е преместил на работа AD_VP.
Служител 102 е имал работа IT_PROG за 2018 дни на работа AD_ и е преместен.
Служител 114 имаше работа ST_CLERK за 647 дни и се премести на работа PU_MAN.
Служител 122 имаше работа ST_CLERK за 364 дни и се премести на работа ST_MAN.
Служител 176 имаше работа SA_REP за 282 дни на работа SA_MAN.
Служител 176 имаше работа SA_MAN за 364 дни и се премести на работа SA_REP.
Служител 200 имаше работа AD_ASST за 2100 дни и се премести на работа AC_ACCOUNT.
Служител 200 за работа AC_ACCOUNT 1644 дни и се премести на работа AD_ASST.
Служител 201 имаше работа MK_REP за 1401 дни и се премести на работа MK_REP.
Процедурата за PL/SQL завърши успешно.
-
как да предам име на таблица като параметър на съхранената процедура?
-
Ускорете операциите за групово вмъкване с NHibernate
-
как да направя пул на връзки в java?
-
Извикване на съхранена ПРОЦЕДУРА в Toad
-
Oracle:множество актуализации на таблици => ORA-01779:не може да промени колона, която се съпоставя с таблица без ключ