Utworz tabele:
POLISY:
kod
nazwa (zawsze wymagana)
opis
kwota (>0 i zawsze wymagana)
firma (zawsze wymagana)
okres (w latach)
UMOWY:
nr_kolejny
dla kogo
jaka polisa (zawsze wymagana)
data podpisu
1. Kazda tabela powinna posiadac klucz glowny, jedna z
tabel klucze obce.
Wpisac rekordy do kazdej tabeli (konkretne
sensowne dane). Umowy bedziemy
mogli zawierac z pracownikami
naszej FIRMY (dane pracownikow w tabeli
pracownicy). Kazdy pracownik moze zawrzec kilka umow.
2. Zdefiniuj perspektywe wyswietlajaca wsztystkich przelozonych i nazwy
zespolow w ktorych pracuja.
3. Napisz procedure
o dwoch parametrach ktora bedzie slozula do podniesienia
placy konkretnemu pracownikowi o konkretna kwote.
Wywolujac procedure
bedziemy podawac dwa parametry:
dla kogo podwyzka i o ile zlotych.
4. Podaj wszystkie ograniczenia integralnosciowe
dla tabeli PRACOWNICY.
1.
CREATE TABLE POLIS (kod
varchar2(10) constraint polis_kod_pk PRIMARY KEY,
nazwa varchar2(15) NOT NULL,
opis VARCHAR2(20), kwota
NUMBER(8,2) NOT NULL constraint polis_kwota_ch CHECK
(kwota >0),
firma VARCHAR2(20) NOT NULL,
okres varchar2(9));
CREATE TABLE umow(nr_kolejny
NUMBER constraint umow_nr_kolejny_pk PRIMARY KEY, id_klienta number(4)constraint umow_id_klienta_r
REFERENCES pracownicy(nr_akt),kod VARCHAR2(10) NOT NULL constraint umow_kod_r
REFERENCES polis,data DATE DEFAULT sysdate);
1a.
CREATE TABLE POLISY
(kod_polisy number(5)constraint
PK_polisy_kod PRIMARY KEY,
nazwa Varchar2(20) constraint CK_polisy_nazwa
NOT NULL,
opis
Varchar2(60),
kwota Number(7,2) constraint CK_polisy_kwota
CHECK (kwota> 0) NOT NULL,
firma Varchar2(60) constraint CK_polisy_firma
NOT NULL,
okres Number(3));
CREATE SEQUENCE SEQ_umowy
create table umowy
(
nr_umowy Number(5) constraint PK_umowy_nr
PRIMARY KEY,
dla_kogo Number(4) constraint FK_umowy_kto
REFERENCES pracownicy(nr_akt),
polisa Number(5) constraint FK_umowy_polisa
REFERENCES polisy(kod_polisy)NOT
NULL,
data_podpisu date DEFAULT sysdate);
2.
CREATE VIEW przeloz
AS
SELECT nr_akt,nazwisko,nazwa from
pracownicy p,dzialy d where
p.id_dzialu=d.id_dzialu and nr_akt in
(select distinct kierownik from pracownicy);
select * from przeloz;
2a.
create or replace view kierownicy as
(select nazwa, nazwisko from pracownicy p join dzialy d on p.id_dzialu = d.id_dzialu where
p.nr_akt in (select distinct kierownik from pracownicy));
3.
create procedure podwyzka(naz varchar2,ile number)
is
begin
update prac1 set placa=placa+ile
where nazwisko=naz;
end;
execute podwyzka('KRÓL',100);
4).
select * from user_constraints where Table_name = 'PRACOWNICY';
Zestaw 6
1. stworzyć tabele
-kasety zawierającą(NR_KASETY,TYTUŁ,GATUNEK,PRODUKCJA,ROK_PRODUKCJI,CENA,STAN(uszkodzona,wypożyczona lub dostępna ))
-klienci(NR_KLIENTA,PESEL,NAZWISKO,ADRES,TELEFON,IMIE)
-wypożyczenia(NR_WYPOŻYCZENIA,NR_KASETY,NR_KLIENTA,DATA_WYP,
DATZ_ZWR)
2. stworzyć perspektywę zawierającą wszystkie dane o kasetach,
które nie były jeszcze nigdy wypożyczone
3. stworzyć wyzwalacz który nie
pozwoli by kaseta obecnie wypożyczona została wypożyczona
4.wszystkim pracownikom
zatrudnionym w niedziele zmienić dzień zatrudnienia na poniedziałek
1.
tabela klienci:
create table klienci (nr_klienta
number(4) constraint klienci_nr_pk PRIMARY KEY,
pesel number(10) constraint
klienci_pesel NOT NULL,
nazwisko varchar2(15),
imie
varchar2(10),
adres varchar2(20),
telefon varchar2(10));
insert into klienci values (1111, 1234567890, 'Iksinski',
'Karol',
'ul.miejska 3 cz-wa', '1243556');
insert into klienci values (1112, 2234567890, 'Kowalski', 'Tomasz',
'ul.Cicha 5 cz-wa',
'32457689');
insert into klienci values (1113, 1334567890, 'Miszczak', 'Pawel',
'ul.bura 3 cz-wa',
'346464757');
tabela kasety:
create table kasety (nr_kasety
number(4) constraint kasety_nr_pk PRIMARY KEY,
tytul varchar2(20),
gatunek varchar2(10),
produkcja varchar2(10),
rok_produkcji number(4),
cena number(4,2),
stan varchar2(11) constraint kasety_stan_ch CHECK (stan in('DOSTEPNA',
'WYPOZYCZONA', 'USZKODZONA')));
insert into kasety values (1, 'Potop', 'klasyka', 'Polska', 1990, 2.20,
'DOSTEPNA');
insert into kasety values (2, 'Ogniem i mieczem', 'klasyka', 'Polska',
1999, 3.00, 'WYPOZYCZONA');
insert into kasety values (3, 'Pan Tadeusz', 'komedia', 'Polska', 1980,
1.00, 'USZKODZONA');
tabela wypozyczenia:
create table wypozyczenia
(nr_wypozyczenia number(4) constraint
wyp_nr_pk primary key,
kaseta number(4) constraint wyp_kaset_fk references kasety(nr_kasety),
klient number(4) constraint wyp_klient_fk references klienci(nr_klienta),
data_wyp date default
sysdate,
data_zwrot date);
insert into wypozyczenia
values (1, 1, 1111, sysdate,
sysdate+1);
insert into wypozyczenia
values (2, 3, 1112, sysdate,
sysdate+2);
insert into wypozyczenia
values (3, 3, 1111, sysdate,
sysdate+1);
2.
create view nie_wyp as (select * from kasety
where nr_kasety not in
(select kaseta from wypozyczenia));
3.
create or replace trigger czy_wypozyczona before insert on wypozyczenia
for each row declare status_kasety varchar2(11);
begin
select stan into status_kasety
from kasety where
nr_kasety = :new.nr_kasety;
if status_kasety='wypozyczona'
then raise_application_error(-20003, 'Nie mozna wypozyczyc
kasety, ktora jest juz wypozyczona!');
end if;
end;
ale wtedy zakładam, że
istnieje trigger, który po dodaniu wypożyczenia
ustawia w odpowiedniej kasecie stan na 'wypozyczona':
create or replace trigger ustaw_wypozyczona after insert on wypozyczenia
for each row
begin
update kasety set stan='wypozyczona' where nr_kasety=:new.nr_kasety;
end;
4.
update pracownicy set data_zatr=data_zatr+1 where rtrim(to_char(data_zatr,'day'))='niedziela';
zestaw zk3.
1.Pytanie identyczne jak to 1 u samej góry tematy :P;
2.Stwórz perspektywę z wszystkimi przełożonymi razem z nazwą działu (tab pracownicy);
3.Stwórz wyzwalacz który nie pozwoli wpisać
prowizji większej niż 1000 w tabeli pracownicy;
4.Wypisz wszystkie więzy integralności w tabeli pracownicy;