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
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment