background image

 

 

POLITECHNIKA OPOLSKA 

Zaawansowane systemy baz danych 

 

Sprawozdanie z wykonanych ćwiczeń 

 

 

 

 

 

 

 

Adam Czech 

W1L1P1 

nr indeksu: 81325  

background image

1.  Obiekty w bazie Oracle. 

 

a)  Ćwiczenie I 

create or replace type czlowiek as object 

(imie VARCHAR2(20), nazwisko VARCHAR2(20), wiek INT); 

 

 

 

 

 

background image

create or replace type pracownik as object 

 (personalia czlowiek, pensja FLOAT, zatrudniony DATE); 

 

 

 

 

background image

 

create table zatrudnieni 

(dzial int,p pracownik); 

 

 

 

 

 

 

background image

insert into zatrudnieni values 

(10, PRACOWNIK(CZLOWIEK('Adam','Czech',23),'3500','2015/04/22')); 

 

 

 

 

 

background image

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 

background image

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; 

 

background image

 

d)  Ćwiczenie IV 

create table PUNKTY of PUNKT_1 

 

 

 

 

e)  Ćwiczenie V 

background image

insert into PUNKTY values ('150','10'); 

 

 

 

 

 

 

 

 

f)  Ćwiczenie VI 

background image

select value(w), w.ODL(PUNKT(0,0)) as "odleglosc od (0,0)" from PUNKTY w where 

w.WezX() + w.WezY() < 100; 

 

 

 

background image

 

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));

 

 

 

 

 

background image

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 

background image

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 

background image

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)); 

 

 

background image

 

 

 

 

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)) 

 

background image

 

 

 

 

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; 

 

background image

 

 

 

 

b)  Ćwczenie II 

create or replace TYPE T_ADRES_TABELA IS VARRAY(3) OF T_ADRES 

 

 

background image

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; 

 

 

background image

 

 

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; 

 

background image

 

 

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 ))); 

 

background image

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, 

background image

S.DATA_UR DATA_UR, 

S.PESEL PESEL, 

S.WZROST WZROST, 

S.ADRESY ADRESY 

FROM STUD_ROW S; 

 

 

 

 

 

background image

 

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; 

background image

 

 

 

 

 

background image

5.  Wyzwalacze 

 

a)  Ćwiczenie I 

create table studenci1 ( 

id_studenta int, 

imie varchar(20), 

nazwisko varchar (35), 

przedmiot varchar (100), 

ocena float); 

 

 

 

background image

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); 

background image