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.
-
Jak używać słowa kluczowego „as” do aliasowania tabeli w Oracle?
-
Zrekonstruuj rezerwową bazę danych w stanie gotowości
-
Dlaczego otrzymuję java.lang.AbstractMethodError podczas próby załadowania obiektu BLOB do bazy danych?
-
Efektywnie wstawiaj duże ilości danych za pomocą SQL
-
Baza danych menedżera pakietów RPM GI 19c