Wydziaˇ Elektrotechniki, Informatyki i Telekomunikacji

Transkrypt

Wydziaˇ Elektrotechniki, Informatyki i Telekomunikacji
!
"
! "
#
$
% &
#
"
$
&& '
$
%"&'!
(
/011 2
/$
3
)*+#,
- .
$
45
$
$
( & $
45
1. Napisa wyzwalacz dla tabeli EMP, który sprawdza czy w polu SALARY nie wpisano bł dnie
liczby ujemnej (zarobki pracownika nie mog by ujemne!).
2. Jak wiadomo w tabeli EMP mo liwe jest przechowywanie informacji o odległo ciach
pracowników (kolumny ID oraz MANAGER_ID). Napisa wyzwalacz, który b dzie kontrolował,
czy wpisywane dla danego pracownika zarobki nie s wi ksze ni zarobki jego bezpo redniego
szefa. Poni ej pokazano cz
danych z tabeli EMP. Wynika z niej, e pracownicy o numerach
ID=20 oraz ID=21 nie mog zarabia wi cej ni 1100, gdy tyle zarabia ich bezpo redni
przeło ony. Podobnie pracownicy o numerach ID=22 oraz ID=23 nie mog zarabia wi cej ni
1300.
ID MANAGER_ID Imie, Nazwisko
SALARY
---------- ---------- ------------------------------ ---------8
2 Ben Biri
1100
20
8 ..Chad Newman
750
21
8 ..Alexander Markarian
850
9
2 Antoinette Catchpole
1300
22
9 ..Eddie Chang
800
23
9 ..Radha Patel
795
3. Napisz wyzwalacz, który b dzie kontrolował (i ew. poprawiał), czy wpisuj c do tabeli EMP imi
oraz nazwisko pracownika pierwsza litera jest du a (przykładowo imi "Marek" powinno zosta
przyj te bez zmian a imi "marek" powinno zosta automatycznie skorygowane do postaci
"Marek").
opracowali: dr in . Artur Gramacki, dr in . Jarosław Gramacki
Bazy danych, ORACLE, PL/SQL
1
4. Do tabeli DEPT doda kolumn NUMBER_OF_EMP (poleceniem ALTER TABLE ...). Zadaniem tej
kolumny b dzie przechowywanie informacji o aktualnej liczbie pracowników, którzy pracuj w
danym dziale. Napisa wyzwalacz, który b dzie dbał o aktualno danych w tej kolumnie.
Poni sze zapytanie wylicza liczb pracowników w poszczególnych działach. Utworzony
wyzwalacz powinien automatycznie wylicza t liczb i uaktualnia kolumn NUMBER_OF_EMP.
Powinien on uruchamia si w przypadku rejestrowania nowego pracownika, kasowania
istniej cego pracownika lub te modyfikacji istniej cego.
SELECT
r.name "Region", d.name "Dział", count(*) "Liczba prac."
FROM
emp E, dept D, region R
WHERE
E.dept_id = D.id AND
D.region_id = R.id
GROUP BY
D.name, D.region_id, R.name;
Region
-------------------North America
North America
North America
South America
Africa / Middle East
Asia
Europe
North America
South America
Africa / Middle East
Asia
Europe
Dział
Liczba prac.
---------------- -----------Administration
2
Finance
1
Operations
4
Operations
3
Operations
3
Operations
2
Operations
3
Sales
2
Sales
1
Sales
1
Sales
2
Sales
1
12 wierszy zostało wybranych.
5. Napisa wyzwalacz, który b dzie sprawdzał, czy dane w tabelach ORD oraz ITEM s spójne.
Je eli stwierdzona zostanie niespójno wyzwalacz powinien odpowiednio zmodyfikowa
warto kolumny TOTAL w tabeli ORD.
Zgodnie z logik modelu SUMMIT2 mamy, e kolumna ORD.TOTAL zawiera (powinna
zawiera ) sumaryczn warto sprzeda y na danym zamówieniu. Jest ona ilo ciowo równa
warto ci wszystkich zamówionych produktów, których szczegóły zapisane s w tabeli ITEM
(czyli jest to suma wszystkich iloczynów ITEM.PRICE * ITEM.QUANTITY dla danego
zamówienia).
fragment tabel
ORD
fragment tabeli
ITEM
<pk>
<fk>
ITEM_ID
ID
ORD_ID
TOTAL
PRICE
QUANTITY
opracowali: dr in . Artur Gramacki, dr in . Jarosław Gramacki
Bazy danych, ORACLE, PL/SQL
2
6. Zaprojektowa a nast pnie zaimplementowa (korzystaj c z odpowiednio zbudowanego
wyzwalacza) mechanizm pozwalaj cy rejestrowa wszelkie operacje (w praktyce chodzi o
INSERT, UPDATE, DELETE) wykonywane na tabeli EMP. Chodzi tu o rodzaj historii zmian
zachodz cych w tabeli EMP.
Poni ej pokazano przykład działania opisanego wy ej mechanizmu dla bardzo prostej tabeli
TEST. Na pocz tek utwórzmy t tabel i wpiszmy do niej przykładowe dane:
DROP TABLE test;
CREATE TABLE test (id NUMBER, kol VARCHAR2(10));
INSERT INTO test VALUES (100, 'a');
INSERT INTO test VALUES (101, 'b');
INSERT INTO test VALUES (102, 'c');
SELECT * FROM test;
Tabela TEST wygl da wi c nast puj co:
ID
KOL
100
a
101
b
102
c
Tabela TEST_HIST rejestruj ca zmiany, które dokonuj si w tabeli TEST niech wygl da jak
poni ej:
ID
KOL
ID_HIST
TYP
DATA
100
a
1001
U
09-09-2003
100
aa
1002
U
12-10-2003
100
aaa
1003
U
15-10-2003
103
d
1004
I
12-11-2003
101
b
1005
U
25-11-2003
101
bb
1006
D
29-11-2003
100
aaaa
1007
D
01-12-2003
Zawiera ona wszystkie kolumny tabeli TEST plus kilka kolumn "systemowych", które
zaznaczono szarym kolorem. Wida , e znajduje si w niej 7 rekordów. Rekordy te zostały
wstawione automatycznie przez odpowiednio zaprojektowany wyzwalacz. S one efektem
wykonania na tabeli TEST czterech operacji UPDATE jednej operacji INSERT oraz dwóch operacji
DELETE:
UPDATE
UPDATE
UPDATE
INSERT
UPDATE
DELETE
DELETE
test
test
test
INTO
test
FROM
FROM
SET kol='aa' WHERE id='100';
SET kol='aaa' WHERE id='100';
SET kol='aaaa' WHERE id='100';
test VALUES (103, 'd');
SET kol='bb' WHERE id='101';
test WHERE id=101;
test WHERE id=100;
SELECT * FROM test;
Zwró my uwag na kolumn ID_HIST, która pozwala nam odtworzy kolejno
dokonywanych w tabeli TEST zmian (liczby te najwygodniej generowa za pomoc sekwencji).
opracowali: dr in . Artur Gramacki, dr in . Jarosław Gramacki
Bazy danych, ORACLE, PL/SQL
3
Kolumna TYP przechowuje symbol wykonywanej operacji (U – UPDATE, I – INSERT, D –
DELETE).
Tabela TEST po wykonaniu powy szych operacji ma nast puj c zawarto :
ID
KOL
102
c
103
d
Zwró my uwag , e dane tabel TEST_HIST mo na bardzo łatwo wykorzysta do wykonania
operacji odtwarzaj cych pierwotny stan tabeli TEST (ang. undo). W poni szej tabeli pokazano
operacje, które nale y wykona aby powróci do stanu pierwotnego:
TYP
D
Operacja do wykonania
INSERT INTO test VALUES (100, 'aaaa');
D
INSERT INTO test VALUES (101, 'bb');
U
UPDATE test SET id=101, kol='b' WHERE id='101';
I
DELETE FROM test WHERE id='103';
U
UPDATE test SET id=100, kol='aaa' WHERE id='100';
U
UPDATE test SET id=100, kol='aa' WHERE id='100';
U
UPDATE test SET id=100, kol='a' WHERE id='100';
Z kolei dzi ki kolumnie DATA mo na zrealizowa operacj automatycznego odtwarzani stanu tabeli
TEST do okre lonego punktu w przeszło ci (ang. point in time recovery). Czy potrafiłby stworzy
procedur PL/SQL która b dzie to realizowała? Zastanów si , czy równie prosto mo na
zrealizowa problem odtwarzania do okre lonego punktu w przeszło ci stanu wielu powi zanych ze
sob tabel (wi zami integralno ci FOREIGN KEY)?
LITERATURA
PL/SQL User's Guide and Reference – oryginalna dokumentacja doł czana do systemu ORACLE
Oracle8i Supplied PL/SQL Packages Reference – oryginalna dokumentacja doł czana do systemu
ORACLE
Oracle8i Error Messages – oryginalna dokumentacja doł czana do systemu ORACLE
Oracle8i SQL Reference – oryginalna dokumentacja doł czana do systemu ORACLE
opracowali: dr in . Artur Gramacki, dr in . Jarosław Gramacki
Bazy danych, ORACLE, PL/SQL
4