POLITECHNIKA OPOLSKA
Zaawansowane systemy baz danych
Sprawozdanie z wykonanych ćwiczeń
Adam Czech
W1L1P1
nr indeksu: 81325
1. Obiekty w bazie Oracle.
a) Ćwiczenie I
create or replace type czlowiek as object
(imie VARCHAR2(20), nazwisko VARCHAR2(20), wiek INT);
create or replace type pracownik as object
(personalia czlowiek, pensja FLOAT, zatrudniony DATE);
create table zatrudnieni
(dzial int,p pracownik);
insert into zatrudnieni values
(10, PRACOWNIK(CZLOWIEK('Adam','Czech',23),'3500','2015/04/22'));
b) Ćwiczenie II
create or replace type punkt as object
(x integer, y integer, member function WezX return integer,
member function WezY return integer, member function
Odl(w in Punkt) return number);
c) Ćwiczenie III
create or replace type body punkt as
member function WezX return integer as
begin
return self.x;
end;
member function WezY return integer as
begin
return self.y;
end;
member function Odl(w in punkt) return number as
begin
return sqrt((x-w.WezX())*(x-w.WezX())+(y-w.WezY())*(y-w.WezY()));
end;
end;
d) Ćwiczenie IV
create table PUNKTY of PUNKT_1
e) Ćwiczenie V
insert into PUNKTY values ('150','10');
f) Ćwiczenie VI
select value(w), w.ODL(PUNKT(0,0)) as "odleglosc od (0,0)" from PUNKTY w where
w.WezX() + w.WezY() < 100;
2. Operacja na obiektach.
a) Ćwiczenie I
create or replace TYPE t_adres as object
(ulica varchar(20),
nr_domu int,
miasto varchar(20),
kod_pocztowy varchar(6),
member function Daj_adres return T_ADRES,
member procedure Zmien_adres(nowy t_adres));
create or replace TYPE BODY T_ADRES AS
MEMBER FUNCTION DAJ_ADRES RETURN T_ADRES IS BEGIN
RETURN SELF;
END;
MEMBER PROCEDURE ZMIEN_ADRES (NOWY T_ADRES)
IS
BEGIN
SELF.ULICA := NOWY.ULICA;
SELF.NR_DOMU := NOWY.NR_DOMU;
SELF.MIASTO := NOWY.MIASTO;
SELF.KOD_POCZTOWY := NOWY.KOD_POCZTOWY;
END;
END;
b) Ćwiczenie II
create or replace TYPE OSOBA as object(
Imie varchar2(20),
Nazwisko varchar2(20),
Data_ur date,
Wzrost int,
Kolor_oczu varchar2(10),
Adres T_ADRES,
member function Daj_imie_i_nazwisko return varchar2,
member function Czy_kolor_oczu(Kolor varchar2) return int,
member procedure Zmien_kolor_oczu(nowy varchar2);
member procedure Zmien_date_ur(nowa date));
create or replace type body OSOBA as
member function Daj_imie_i_nazwisko return varchar2 is begin return self.imie||'
'||self.nazwisko; end;
member function Czy_kolor_oczu(Kolor varchar2) return int is begin
if ( self.Kolor_oczu not like Kolor) then return 0; else return 1; end if; end;
member procedure Zmien_kolor_oczu(nowy varchar2) is begin
self.Kolor_oczu := nowy; end;
member procedure Zmien_date_ur(nowa date) is begin
self.Data_ur := nowa;
end; end;
c) Ćwiczenie III
create or replace TYPE T_STUDENT as object(
Imie varchar2(20),
Nazwisko varchar2(20),
Data_ur date,
Wzrost int,
Adres T_ADRES_TABELA,
Zaliczone_przedmioty T_PRZEDMIOT_TABELA,
member function Daj_studenta return varchar2,
member procedure Zmien_date_ur(nowa date));
3. Kolekcje
a) Ćwiczenie I
create or replace type t_przedmiot as object
( nazwa_przedmiotu varchar2(20), ocena integer,
member function daj_przedmiot return varchar2,
member procedure zmien_ocene(nowa integer))
create or replace type body t_przedmiot as
member function daj_przedmiot return varchar2
is
begin
return self.nazwa_przedmiotu;
end;
member procedure zmien_ocene(nowa integer)
is
begin self.ocena:=nowa;
end;
end;
b) Ćwczenie II
create or replace TYPE T_ADRES_TABELA IS VARRAY(3) OF T_ADRES
create or replace TYPE T_PRZEDMIOT_TABELA AS TABLE OF T_PRZEDMIOT
create table STUDENCI of T_STUDENT nested table Zaliczone_przedmioty store as
Zaliczenia;
INSERT INTO STUDENCI VALUES (Adam, 'Czech', '1991-08-28',174,
T_ADRES_TABELA(T_ADRES('Dluga', 32, 'Krzanowice', 47470 ),
T_ADRES('Lipowa',11,'Kosia',47400)),
T_PRZEDMIOT_TABELA(T_PRZEDMIOT(' Analiza ', 3), T_PRZEDMIOT('Bazy',5),
T_PRZEDMIOT(‘wf',4)));
4. Perspektywy obiektowe
a) Ćwiczenie I
create table STUD_ROW of tstudent nested table adresy store as adresy_stored_1;
create table STUD_COL (ID_STUD number(4), student tstudent) nested table
student.adresy store as adresy_stored_2;
insert into STUD_ROW Values (' ADAM ',' CZECH','1991-08-28',
12345678991,174,KADRESY(TADRES('Dluga',32,'Krzanowice',47470 )));
insert into STUD_COL Values (1,TSTUDENT(' ADAM ',' CZECH','1991-08-28',
12345678991,174,KADRESY(TADRES('Dluga',32,'Krzanowice',47470 )));
b) Ćwiczenie II
CREATE OR REPLACE VIEW PERS1 AS SELECT K.ID_STUD, K.STUDENT.IMIE IMIE,
K.STUDENT.NAZWISKO NAZWISKO,
K.STUDENT.DATA_UR DATA_UR,
K.STUDENT.PESEL PESEL,
K.STUDENT.WZROST WZROST,
K.STUDENT.ADRESY ADRESY
FROM STUD_COL K;
CREATE OR REPLACE VIEW PERS2 OF TSTUDENT WITH OBJECT IDENTIFIER (PESEL)
AS SELECT
S.IMIE IMIE,
S.NAZWISKO NAZWISKO,
S.DATA_UR DATA_UR,
S.PESEL PESEL,
S.WZROST WZROST,
S.ADRESY ADRESY
FROM STUD_ROW S;
c) Ćwiczenie III
create or replace trigger wyzwalacz instead of insert or update or delete on pers1
for each row declare
a kadresy; begin
if deleting then
delete table(select s.student.adresy from stud_col s where
s.student.nazwisko=:old.nazwisko) p;
end if;
if inserting then
a:=:new.adresy;
for i in a.first..a.last loop
insert into table(select s.student.adresy from stud_col s where
s.id_stud=:new.id_stud) p
values(tadres(a(i).ulica,a(i).nr_domu,a(i).miasto,a(i).kod_pocztowy));
end loop; end if;
if updating then
a:=:new.adresy;
for i in a.first..a.last loop
update table(select s.student.adresy from stud_col s where s.id_stud=:new.id_stud)
p set p.ulica=a(i).ulica;
update table(select s.student.adresy from stud_col s where s.id_stud=:new.id_stud)
p set p.nr_domu=a(i).nr_domu;
update table(select s.student.adresy from stud_col s where s.id_stud=:new.id_stud)
p set p.miasto=a(i).miasto;
update table(select s.student.adresy from stud_col s where s.id_stud=:new.id_stud)
p set p.kod_pocztowy=a(i).kod_pocztowy;
end loop;
end if;
end;
5. Wyzwalacze
a) Ćwiczenie I
create table studenci1 (
id_studenta int,
imie varchar(20),
nazwisko varchar (35),
przedmiot varchar (100),
ocena float);
create table statystyki (
przedmiot varchar (100),
liczba_studentow int,
suma_ocen float);
insert into studenci1 values ( 3,'Adam','Czech','Bazdy Danych',5);
insert into studenci1 values ( 4,'Marek','Porazka','Sieci',5);
insert into studenci1 values ( 5,'Dominika','Kowalczyk','Programowanie',2);
insert into studenci1 values ( 6,'Lukasz','Baszta','Bazy danych',3);
insert into studenci1 values ( 7,'Dawid','Kropka','Fizyka',2);
insert into studenci1 values ( 8,'Kamil','Penderecki','Analiza',4);
insert into studenci1 values ( 9,'Maciej','Kozak','Sieci',3);
insert into studenci1 values ( 10,'Maria','Stasiewicz','Analiza',4);