sql >> Databasteknik >  >> RDS >> Oracle

Öka prestanda med Bulk Collect i Oracle

Använd Bulk Collect för att hämta flera rader med data i en enda hämtning . Flera rader med data i en enda hämtning minskar antalet nätverksresor och förbättrar prestandan.
Följande exempel beskriver jobbet som anges i JOB_HISTORY-tabellen var jobbet den anställde hade men också jobbet som den anställde gick till efter att jobb listat i tabellen JOB_HISTORY.
SKAPA ELLER ERSÄTT PROCEDUR Promotion_Rev

IS
old_job hr.job_history.job_id%TYPE;
new_job hr.job_history.job_id%TYPE;
nincr NUMBER;

CURSOR cselectjob
IS
VÄLJ anställd_id,
startdatum,
slutdatum,
jobb_id
FRÅN hr.job_historik
BESTÄLL EFTER anställd_id, startdatum;

TYPE jh_rec ÄR REKORD (
anställd_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 IS TABLE OF jh_rec
INDEX BY PLS_INTEGER;

jh_table_array jh_table;
BEGIN
OPEN cselectjob;

HÄMTA cselectjob
GROSSAMLA INTO jh_table_array;

STÄNG cselectjob;

FÖR räknare I jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF-räknare =jh_table_array.LAST

nincr :=0;
ANNAT
nincr :=1;
END IF;

old_job :=jh_table_array (counter).job_id;

OM jh_table_array (counter).employee_id =
jh_table_array (räknare + nincr).employee_id

new_job :=jh_table_array (räknare + nincr).job_id;
ANNAT
VÄLJ jobb-id
INTO new_job
FRÅN hr.anställda
VAR hr.anställda.anställda_id =
jh_table_array (counter).employee_id;
END IF;

DBMS_OUTPUT.put_line( 'Anställd '
|| jh_table_array (counter).employee_id
|| ' hade jobbet '
|| old_job
|| ' för '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' dagar och flyttade till jobbet '
|| new_job
|| '.');
END LOOP;
END;
/

Utför följande procedur:

ställ in serverutgång på;
BEGIN
promotion_rev;
END;
/
Utgången bör komma ungefär så här:

Anställd 101 hade jobb AC_ACCOUNT i 1497 dagar och flyttade till jobb AC_MGR.
Anställd 101 hade jobb AC_MGR i 1234 dagar och flyttade till jobb AD_VP.
Anställd 102 hade jobb IT_PROG under 2018 dagar och flyttade till jobb AD_VP.
Anställd 114 hade jobb ST_CLERK i 647 dagar och flyttade till jobb PU_MAN.
Anställd 122 hade jobb ST_CLERK i 364 dagar och flyttade till jobb ST_MAN.
Anställd 176 hade jobb SA_REP i 282 dagar och flyttade till jobbet SA_MAN.
Anställd 176 hade jobb SA_MAN i 364 dagar och flyttade till jobb SA_REP.
Anställd 200 hade jobb AD_ASST i 2100 dagar och flyttade till jobb AC_ACCOUNT.
Anställd 200 hade jobb AC_ACCOUNT för 1644 dagar och flyttade till jobbet AD_ASST.
Anställd 201 hade jobbet MK_REP i 1401 dagar och flyttade till jobbet MK_REP.
PL/SQL-proceduren har slutförts framgångsrikt.

  1. SQL WHERE.. IN sats flera kolumner

  2. Ansluter du till DB från ett Chrome-tillägg?

  3. EXCEPT körs snabbare än en JOIN när tabellkolumnerna är desamma

  4. Hur man använder FILEGROUPPROPERTY() i SQL Server