Oracle
 sql >> база данни >  >> RDS >> Oracle

Увеличете производителността с групово събиране в Oracle

Използвайте групово събиране, за да извлечете няколко реда данни в една операция за извличане. Множество реда данни в едно извличане намаляват броя на мрежовите двупосочни пътувания и подобряват производителността.
Следният пример описва заданието, посочено в таблицата 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 завърши успешно.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. как да предам име на таблица като параметър на съхранената процедура?

  2. Ускорете операциите за групово вмъкване с NHibernate

  3. как да направя пул на връзки в java?

  4. Извикване на съхранена ПРОЦЕДУРА в Toad

  5. Oracle:множество актуализации на таблици => ORA-01779:не може да промени колона, която се съпоставя с таблица без ключ