Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zwiększ wydajność dzięki zbiorczemu odbiorowi w Oracle

Użyj funkcji Zbieranie zbiorcze, aby pobrać wiele wierszy danych w ramach jednej operacji pobierania. Wiele wierszy danych w jednym pobieraniu zmniejsza liczbę połączeń w obie strony i poprawia wydajność.
Poniższy przykład opisuje pracę wymienioną w tabeli JOB_HISTORY to praca, którą miał pracownik, ale także praca, do której pracownik przeszedł po zadanie wymienione w tabeli JOB_HISTORY.
UTWÓRZ LUB ZAMIEŃ PROCEDURĘ Promotion_Rev

JEST
stare_zadanie hr.job_history.job_id%TYPE;
nowe_job hr.job_history.job_id%TYPE;
nincr NUMBER;

CURSOR cselectjob
JEST
SELECT id_pracownika,
data_początkowa,
data_końcowa,
id_pracy
FROM hr.job_history
ORDER BY id_pracownika, data_początkowa;

TYP jh_rec JEST ZAPISEM (
identyfikator_pracownika hr.job_history.employee_id%TYPE,
data_początkowa hr.job_history.start_date%TYPE,
data_końcowa hr.job_history.end_date%TYPE,
data_id_pracy hr .job_history.job_id%TYPE
);

TYP jh_table TO TABELA jh_rec
INDEKS WEDŁUG PLS_INTEGER;

jh_table_array jh_table;
BEGIN
OTWÓRZ cselectjob;

POBIERZ cselectjob
ZBIERAJ ZBIORCZO DO jh_table_array;

ZAMKNIJ cselectjob;

FOR counter IN jh_table_array.FIRST .. jh_table_array.LAST
PĘTLA
IF licznik =jh_table_array.LAST
TO
nincr :=0;
INACZEJ
nincr :=1;
KONIEC JEŻELI;

stare_zadanie :=jh_table_array (licznik).job_id;

JEŻELI jh_table_array (licznik).employee_id =
jh_table_array (licznik + nincr).employee_id
TO
nowe_zadanie :=jh_table_array (licznik + nincr).job_id;
JEŚLI
SELECT 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( 'Pracownik '
|| jh_table_array (licznik).employee_id
|| ' miał zadanie '
|| stare_zadanie
|| ' dla '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' dni i przeniesiony do zadania '
|| nowe_zadanie
|| '.');
KONIEC PĘTLI;
KONIEC;
/

Wykonaj następującą procedurę:

ustaw serveroutput on;
BEGIN
Promotion_rev;
END;
/
Wynik powinien wyglądać tak:

Pracownik 101 miał stanowisko AC_ACCOUNT przez 1497 dni i przeszedł na stanowisko AC_MGR.
Pracownik 101 miał stanowisko AC_MGR przez 1234 dni i przeniósł się na stanowisko AD_VP.
Pracownik 102 miał stanowisko IT_PROG przez 2018 dni i przeszedł na stanowisko AD_VP.
Pracownik 114 miał pracę ST_CLERK przez 647 dni i przeniósł się do stanowiska PU_MAN.
Pracownik 122 miał pracę ST_CLERK przez 364 dni i przeniósł się do stanowiska ST_MAN.
Pracownik 176 miał pracę SA_REP przez 282 dni i przeniósł się na stanowisko SA_MAN.
Pracownik 176 miał stanowisko SA_MAN przez 364 dni i przeniósł się do stanowiska SA_REP.
Pracownik 200 miał stanowisko AD_ASST przez 2100 dni i przeniósł się na stanowisko AC_ACCOUNT.
Pracownik 200 miał stanowisko AC_ACCOUNT na 1644 dni i przeszedł do zadania AD_ASST.
Pracownik 201 miał zadanie MK_REP przez 1401 dni i przeszedł do zadania MK_REP.
Procedura PL/SQL została pomyślnie zakończona.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać słowa kluczowego „as” do aliasowania tabeli w Oracle?

  2. Zrekonstruuj rezerwową bazę danych w stanie gotowości

  3. Dlaczego otrzymuję java.lang.AbstractMethodError podczas próby załadowania obiektu BLOB do bazy danych?

  4. Efektywnie wstawiaj duże ilości danych za pomocą SQL

  5. Baza danych menedżera pakietów RPM GI 19c