Friday, December 22, 2017

Tugas Trigger Oracle





TUGAS TRIGGER

BASIS DATA LANJUT



Jawab pertanyaan berikut disertai dengan penjelasan.
1. Perubahan pada data hanya diperbolehkan selama jam kerja dari jam 8:45 pagi
sampai 17.30 , dari Senin hingga Jum’at. Buat stored procedure dengan nama
SECURE_DML untuk mencegah DML statement dijalankan diluar dari jam kerja,
dengan menampilkan pesan “ Perubahan pada data hanya diperbolehkan hanya pada jam kerja ”.

2.Buat statement trigger pada tabel EMPLOYEES untuk memanggil prosedur diatas.

3.Implementasikan trigger berikut pada table JOBS sehubungan dengan kenaikan gaji pegawai.

Buat stored procedure dengan nama UPD_EMP_SAL untuk mengupdate jumlah gaji pada table EMPLOYEES. Prosedur ini menerima dua parameter : job id dari gaji yang akan diubah dan nilai minimum salary yang baru. Prosedur ini dijalankan dari trigger yang dibuat pada table JOBS.
4. Lanjutan dari soal nomer 3, buat row trigger dengan nama UPDATE_EMP_SALARY pada table JOBS yang memanggil prosedur UPD_EMP_SAL, pada saat minimum gaji pada table JOBS diubah untuk suatu job_ID tertentu.

Catatan : yang merubah nilai gaji pegawai pada table EMPLOYEES adalah prosedur UPDATE_EMP_SALARY

Jawab !

1. CREATE OR REPLACE TRIGGER secure_dml

BEFORE INSERT ON employees

BEGIN

IF (TO_CHAR(SYSDATE,'DY') IN ('SAT','SUN')) OR

(TO_CHAR(SYSDATE,'HH24:MI') NOT BETWEEN '08:45’ AND '17:30')

THEN RAISE_APPLICATION_ERROR (-20500,'Penyisipan data pada table EMPLOYEES hanya diperbolehkan selama jam kerja');

END IF;

END;

/





2. INSERT INTO employees (employee_id, last_name,first_name, email, hire_date, job_id, salary, department_id) VALUES (300, 'Smith', 'Rob', 'RSMITH', SYSDATE,'IT_PROG', 4500, 60);







3. CREATE OR REPLACE PROCEDURE upd_emp_sal

(p_job_id IN employees.job_id%TYPE, p_min_sal IN employees.salary%TYPE)

IS

CURSOR c_emp_sal_update(cp_job_id employees.job_id%TYPE) IS

SELECT salary

FROM employees

WHERE job_id = cp_job_id

FOR UPDATE OF salary NOWAIT;

BEGIN

FOR v_c IN c_emp_sal_update(p_job_id)

LOOP

IF v_c.salary < p_min_sal THEN

UPDATE employees SET salary = p_min_sal

WHERE CURRENT OF c_emp_sal_update;

END IF;

END LOOP;

END upd_emp_sal;

/



















































4. CREATE OR REPLACE TRIGGER update_emp_salary

AFTER INSERT OR UPDATE

OF min_salary ON jobs

FOR EACH ROW

BEGIN

IF :NEW.min_salary > :OLD.min_salary THEN

upd_emp_sal(:NEW.job_id, :NEW.min_salary);

END IF;

END update_emp_salary;

/

Download









No comments:

Post a Comment