Zadania dot. wyzwalaczy
Transkrypt
Zadania dot. wyzwalaczy
Bazy Danych – triggery extra Poniższe zadania zakładają istnienie następującej struktury danych: CREATE TABLE Emp_tab ( Empno NUMBER NOT NULL, Ename VARCHAR2(10), Job VARCHAR2(9), Mgr NUMBER(4), Hiredate DATE, Sal NUMBER(7,2), Comm NUMBER(7,2), Deptno NUMBER(2) NOT NULL); CREATE TABLE Audit_table ( Seq NUMBER, Time_now DATE, Job VARCHAR2(10), Proc VARCHAR2(10), enum NUMBER); CREATE SEQUENCE Audit_seq; CREATE TABLE Audit_table_values ( Seq NUMBER, Dept VARCHAR2(10), Dept1 NUMBER, Dept2 NUMBER); CREATE TABLE Inventory ( Part_Number NUMBER, Parts_on_hand NUMBER, Description VARCHAR2(50), Price NUMBER, Quantity_On_Hand NUMBER, Reorder_point NUMBER, Reorder_Quantity NUMBER); CREATE TABLE Pending_orders ( Part_Number NUMBER, Reorder_Quantity NUMBER, Curr_date DATE); CREATE TABLE Audit_emp ( Emp_no NUMBER, Description VARCHAR2(30), Date_inserted DATE); 1. Utworzyć wyzwalacz wierszowy dla tabeli Inventory. Wyzwalacz powinien uruchamiać się po wystąpieniu zdarzenia update dla kolumny Parts_on_hand. Jeżeli nowa wartość dla Parts_on_hand jest większa od nowej wartości dla Reorder_point, wyzwalacz powinien zliczyć liczbę rekordów w tabeli Pending_orders takich, gdzie wartość dla Part_Number równa się wstawianemu numerowi części Part_Number. W przypadku, gdy wartość ta wynosi 0 powinien wstawić do tabeli Pending_orders rekord z numerem Part_Number, nową wartością Reorder_quantity oraz bieżącą datą. 2. Utworzyć jeden wyzwalacz wierszowy dla tabeli Emp_tab. Wyzwalacz powinien uaktywniać się po zdarzeniach insert, update lub delete. Jeżeli wystąpi zdarzenie insert, wyzwalacz powinien wpisać do tabeli Audit_table następujące informacje: kolejną wartość z sekwencji Audit_seq, aktualny czas, ‘Emp_tab’, ‘Insert’ oraz numer pracownika wstawianego do tabeli Emp_tab. Jeżeli wystąpi zdarzenie delete, powinien zalogować w Audit_table podobne informacje jak powyżej, z tym że nazwa zdarzenia to ‘Delete’, natomiast wartość ostatniej kolumny to identyfikator usuwanego pracownika. Jeżeli wystąpi zdarzenie update, powinien zalogować analogiczne informacje jak dla delete z informacją o nazwie zdarzenia – ‘Update’. Gdyby aktualizacja dotyczyła kolumn Sal lub Deptno, to powinien wpisać stare i nowe wartości zmienianych kolumn do tabeli Audit_table_values wraz z bieżącym numerem sekwencji Audit_seq i informacją o nazwie zmienianej kolumny (Sal lub Deptno). 3. Utworzyć wyzwalacz wierszowy dla tabeli Emp_tab. Wyzwalacz powinien uaktywniać się po zdarzeniu insert i wywoływać procedurę wbudowaną, która wprowadza nowy rekord do tabeli Audit_emp z numerem identyfikacyjnym wstawianego pracownika, komunikatem Wstawiono nowy rekord oraz bieżącą datą. W oddawanych rozwiązaniach powinny się znaleźć: treść zadania, kod rozwiązujący zadanie, krótki opis kodu koncentrujący się na jego ciekawszych fragmentach.