sql >> Database >  >> RDS >> Oracle

Verhoog de prestaties met Bulk Collect in Oracle

Gebruik Bulk Collect om meerdere rijen gegevens op te halen in één ophaalbewerking . Meerdere rijen gegevens in één keer ophalen verminderen het aantal netwerkrondreizen en verbeteren de prestaties.
Het volgende voorbeeld beschrijft de baan die in de JOB_HISTORY-tabel wordt vermeld, was de baan die de werknemer had, maar ook de baan waar de werknemer naartoe ging na de taak vermeld in de JOB_HISTORY tabel.
PROCEDURE MAKEN OF VERVANGEN Promotion_Rev

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

CURSOR cselectjob
IS
SELECT employee_id,
start_date,
end_date,
job_id
UIT hr.job_history
ORDER OP werknemer_id, start_date;

TYPE jh_rec IS RECORD (
employee_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 TABEL VAN jh_rec
INDEX DOOR PLS_INTEGER;

jh_table_array jh_table;
BEGIN
OPEN cselectjob;

FETCH cselectjob
BULK VERZAMELEN IN jh_table_array;

SLUIT cselectjob;

FOR counter IN jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST
THEN
nincr :=0;
ANDERS
nincr :=1;
EINDE ALS;

old_job :=jh_table_array (teller).job_id;

IF jh_table_array (teller).employee_id =
jh_table_array (teller + nincr).employee_id
THEN
new_job :=jh_table_array (teller + nincr).job_id;
ANDERS
SELECT job_id
INTO new_job
VAN hr.employees
WAAR hr.employees.employee_id =
jh_table_array (counter).employee_id;
END IF;

DBMS_OUTPUT.put_line( 'Werknemer'
|| jh_table_array (teller).employee_id
|| ' had baan '
|| oude_taak
|| ' voor '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' dagen en verplaatst naar job '
|| new_job
|| '.');
EINDE LUS;
END;
/

Voer de volgende procedure uit:

zet serveroutput op;
BEGIN
promotion_rev;
END;
/
De output zou er ongeveer zo uit moeten zien:

Werknemer 101 had baan AC_ACCOUNT voor 1497 dagen en verhuisde naar baan AC_MGR.
Werknemer 101 had baan AC_MGR voor 1234 dagen en verhuisde naar baan AD_VP.
Werknemer 102 had baan IT_PROG voor 2018 dagen en verhuisde naar baan AD_VP.
Werknemer 114 had baan ST_CLERK voor 647 dagen en verhuisde naar baan PU_MAN.
Werknemer 122 had baan ST_CLERK voor 364 dagen en verhuisde naar baan ST_MAN.
Werknemer 176 had baan SA_REP voor 282 dagen en verhuisde naar job SA_MAN.
Werknemer 176 had job SA_MAN voor 364 dagen en verhuisde naar job SA_REP.
Werknemer 200 had job AD_ASST voor 2100 dagen en verhuisde naar job AC_ACCOUNT.
Werknemer 200 had job AC_ACCOUNT voor 1644 dagen en verplaatst naar baan AD_ASST.
Werknemer 201 had baan MK_REP voor 1401 dagen en verhuisde naar baan MK_REP.
PL/SQL-procedure succesvol afgerond.

  1. Bepaal de rangorde op basis van meerdere kolommen in MySQL

  2. De soort die naar niveau 15.000 stroomt

  3. Meer transactielogvet bijsnijden

  4. Foutwaarde bestaat niet - probleem postgresql INSERT INTO