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;