sql >> Database teknologi >  >> RDS >> Oracle

Forøg ydeevnen med Bulk Collect i Oracle

Brug Bulk Collect til at hente flere rækker af data i en enkelt hentning . Flere rækker af data i en enkelt hentning reducerer antallet af netværksrejser og forbedrer ydeevnen.
Det følgende eksempel beskriver jobbet, der er angivet i JOB_HISTORY-tabellen, var det job, medarbejderen havde, men også det job, medarbejderen gik til efter job angivet i JOB_HISTORY-tabellen.
OPRET ELLER ERSTAT PROCEDURE 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 ansat_id,
start_date,
end_date,
job_id
FRA hr.job_history
BESTIL EFTER medarbejder_id, startdato;

TYPE jh_rec ER REKORD (
ansat_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 ER TABEL OVER jh_rec
INDEX BY PLS_INTEGER;

jh_table_array jh_table;
BEGIN
OPEN cselectjob;

FETCH cselectjob
BULK SAMLING I jh_table_array;

LUK cselectjob;

FOR tæller I jh_table_array.FIRST .. jh_table_array.LAST
LOOP
IF counter =jh_table_array.LAST

nincr :=0;
ELSE
nincr :=1;
SLUT HVIS;

old_job :=jh_table_array (tæller).job_id;

HVIS jh_table_array (counter) VÆLG job_id
INTO new_job
FRA hr.employees
HVOR hr.employees.employee_id =
jh_table_array (counter).employee_id;
END IF;

DBMS_OUTPUT.put_line( 'Medarbejder '
|| jh_table_array (counter).employee_id
|| ' havde job '
|| old_job
|| ' for '
| | (jh_table_array (counter).end_date
- jh_table_array (counter).start_date)
|| ' dage og flyttet til jobbet '
|| new_job
|| '.');
END LOOP;
END;
/

Udfør følgende procedure:

sæt serveroutput til;
BEGIN
promotion_rev;
END;
/
Outputtet skulle komme nogenlunde sådan her:

Medarbejder 101 havde job AC_ACCOUNT i 1497 dage og flyttede til job AC_MGR.
Medarbejder 101 havde job AC_MGR i 1234 dage og flyttede til job AD_VP.
Medarbejder 102 havde job IT_PROG i 2018 dage og flyttede til job AD_VP.
Medarbejder 114 havde job ST_CLERK i 647 dage og flyttede til job PU_MAN.
Medarbejder 122 havde job ST_CLERK i 364 dage og flyttede til job ST_MAN.
Medarbejder 176 havde job SA_REP i 282 dage og flyttede til job SA_MAN.
Medarbejder 176 havde job SA_MAN i 364 dage og flyttede til job SA_REP.
Medarbejder 200 havde job AD_ASST i 2100 dage og flyttede til job AC_ACCOUNT.
Medarbejder 200 havde job AC_ACCOUNT for 1644 dage og flyttede til job AD_ASST.
Medarbejder 201 havde job MK_REP i 1401 dage og flyttede til job MK_REP.
PL/SQL-procedure gennemført.

  1. PDO-bindingsværdier for MySQL IN-sætning

  2. Hvordan kan vi definere output parameter størrelse i lagret procedure?

  3. I stedet for LIKE og ~, hvorfor kun SIMILAR TO virker, når man laver regex-match med alternativer

  4. Træk og slip i MS Access og betinget sortering