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.

Podobne dokumenty