Integrarea Bazelor de Date cu Alte Tehnologii Informatice
Academia de studii economice
Facultatea de cibernetică, statistică si informatică economică
Panduroaica Alina-Florentina
An II, Seria B, Grupa 1031
București, 2015
PL/SQL avansat (extensia OO)
Schema conceptuală a bazei de date
Am realizat gestiunea unui parc auto. Parcul auto presteaza servicii de vânzare a diferitelor tipuri de vehicule.
Am creat tipurile de obiecte:
VEHICUL – clasa principală din care am derivat clasele „Camion” și „Mașină”
CAMION,
MASINA.
Pe baza obiectelor, am creat tabelele:
VEHICULE,
CAMIOANE,
MASINI.
Vehiculele sunt de două tipuri : camioane și mașini. Un vehicul se identifica unic prin numărul de inmatriculare. Acesta are mai multe caracteristici, precum : marcă, capacitate cilindrică, anul fabricației. Un camion se difențiază de mașină prin faptul că are remorcă (capacitatea remorcii), punți și o limită de viteză. Mașina, în schimb are locuri pentru pasageri și mai multe tipuri de caroserie.
Nr_inmatriculare este cheie primara in tabela VEHICULE și cheie externă în tabelele CAMIOANE și MAȘINI.
Schema conceptuală a bazei de date corespunzătoare parcului auto
VEHICULE
CAMIOANE
MAȘINI
Crearea tipurilor de obiecte
/* CREAREA TIPUL DE OBIECT VEHICUL*/
create or replace type vehicul as object (nr_inmatriculare varchar2(10),
marca varchar2(10),
capacitate number(4),
an_fabricatie number(4),
pret number(7,2),
static function pret_mediu return number,
member function get_marca return varchar2)
not final;
/* CREAREA TIPUL DE OBIECT CAMION DERIVAT DIN VEHICUL*/
create type camion under vehicul (capacitate_remorca number,
nr_punti number,
viteza_max number,
member procedure afisare,
static function get_viteza_maxima return number) final;
/* CREAREA TIPUL DE OBIECT MASINA DERIVAT DIN VEHICUL*/
create type masina under vehicul (nr_locuri number,
caroserie varchar2(100),
tuning varchar2(10),
static function pret_mediu return number,
member function get_nr_locuri_diferit return number,
member procedure caroserie_berlina) final;
Crearea tabelelor pe baza obiectelor
create table vehicule of vehicul;
create table camioane of camion;
create table masini of masina;
Inserarea datelor în tabele
delete from vehicule;
delete from camioane;
delete from masini;
insert into vehicule values(vehicul('B50PEA','Volkswagen',1900,2000,720));
insert into vehicule values(vehicul('B87CEO','Renault',1400,2010,430));
insert into vehicule values(vehicul('IF30AAA','Dacia',1000,2009,210));
insert into vehicule values(vehicul('CT10INI','Iveco',2009,2004,579));
insert into vehicule values(vehicul('IL01OOO','Mercedes',1900,2000,120));
insert into vehicule values(vehicul('TM123ZEN','BMW',1400,1995,410));
insert into vehicule values(vehicul('IF33ALA','Mazda',900,2014,900));
insert into vehicule values(vehicul('IF101BLU','Man',3000,2011,670));
insert into vehicule values(vehicul('CT10UUU','BMW',1400,2009,540));
insert into vehicule values(vehicul('DB11ILI','Dacia',2000,2009,300));
insert into camioane values(camion('B50PEA','Volkswagen',1900,2000,720,200,3,200));
insert into camioane values(camion('B87CEO','Renault',1400,2010,430,110,4,180));
insert into camioane values(camion('CT10INI','Iveco',2009,2004,579,150,4,150));
insert into camioane values(camion('IL01OOO','Mercedes',1900,2000,120,190,5,130));
insert into camioane values(camion('IF101BLU','Man',3000,2011,670,210,6,210));
insert into masini values(masina('IF30AAA','Dacia',1000,2009,210,2,'Berlina','NU'));
insert into masini values(masina('TM123ZEN','BMW',1400,1995,410,5,'Cabrio','DA'));
insert into masini values(masina('IF33ALA','Mazda',900,2014,900,7,'Break','DA'));
insert into masini values(masina('CT10UUU','BMW',1400,2009,540,4,'Coupe','DA'));
insert into masini values(masina('DB11ILI','Dacia',2000,2009,300,5,'Berlina','NU'));
Constrângeri tabele
alter table vehicule add constraint pk_vehicul primary key(nr_inmatriculare);
alter table camioane add constraint fk_camioane foreign key (nr_inmatriculare) references vehicule(nr_inmatriculare);
alter table masini add constraint fk_masini foreign key (nr_inmatriculare) references vehicule(nr_inmatriculare);
Crearea corpului obiectelor
/* CREAREA CORPULUI OBIECTULUI VEHICUL*/
Funcția statică PRET_MEDIU returnează prețul mediu de vânzare al tuturor vehiculelor din parcul auto.
Funcția membră GET_MARCA returnează categoria vehiculului în funcție de capacitatea cilindrică, astfel :
dacă capacitatea cilindrică este cuprinsă între 0-1000 atunci este un vehicul de uz personal
dacă capacitatea cilindrică este cuprinsă între 1001-2000 atunci este un vehicul de transport
dacă capacitatea cilindrică este mai mare decât 2000 atunci este un vehicul de teren.
create type body vehicul
is
static function pret_mediu return number
is
vRez number(7,2);
begin
select avg(pret) into vRez from vehicule;
return vRez;
end pret_mediu;
member function get_marca return varchar2
is
begin
if self.capacitate between 0 and 1000 then return 'Vehicul uz personal';
elsif self.capacitate between 1001 and 2000 then return 'Vehicul trasport';
else return 'Vehicul de teren';
end if;
end get_marca;
end;
/* CREAREA CORPULUI OBIECTULUI CAMION*/
Funcția statică GET_VITEZA_MAXIMA returnează viteza maximă ce poate fi atinsă de un camion din parcul auto.
Procedura membră AFISARE afișează detaliile despre camioane.
create or replace type body camion is
member procedure afisare
is
begin
dbms_output.put_line('Marca:'||self.marca||', nr inamtriculare:'||self.nr_inmatriculare||', capacitatea remorcii:'||self.capacitate_remorca||', viteza maxima:'||self.viteza_max||', numarul de punti:'||self.nr_punti);
end afisare;
static function get_viteza_maxima return number
is
vmax number;
begin
select max(viteza_max) into vmax from camioane;
return vmax;
end get_viteza_maxima;
end;
/* CREAREA CORPULUI OBIECTULUI MASINA*/
Funcția statică PRET_MEDIU este suprascrisa și returnează prețul mediu de vânzare al tuturor masinilor din parcul auto
Funcția membră get_nr_locuri_diferit returneaza numarul de locuri suplimentare sau în minus față de 5 locuri(nr de locuri standard).
Procedura membră caroserie berlină afișează un mesaj prin care se precizează tipul caroseriei.
create or replace type body masina is
static function pret_mediu return number
is
vRez number(7,2);
begin
select avg(pret) into vRez from masini;
return vRez;
end pret_mediu;
member function get_nr_locuri_diferit return number
is
begin
return abs(self.nr_locuri-5);
end get_nr_locuri_diferit;
member procedure caroserie_berlina
is
begin
if upper(self.caroserie)='BERLINA' THEN DBMS_OUTPUT.PUT_LINE('Masina cu numarul de inmatriculare '||self.nr_inmatriculare||' este berlina.');
else DBMS_OUTPUT.PUT_LINE('Masina cu numarul de inmatriculare '||self.nr_inmatriculare||' este nu este berlina! Este '||self.caroserie);
end if;
end caroserie_berlina;
end;
Interogarea obiectelor (apelarea tuturor metodelor)
-Afisarea pretului mediu pentru vehiculele din parcul auto
-Afisarea tipului de vehicul pentru toate vehiculele din parcul auto
-Apelul aceleiasi functii pentru o inregistrare data de la tastatura:
-Afisarea datelor despre camioanele parcului auto:
-Afisarea datelor despre un camion nou introdus:
-Determinarea vitezei maxime care poate fi atinsa de un camion al parcului auto:
Afisarea pretului mediu pentru masini (functie mostenita de la vehicul)-supraincarcare:
-Afisarea numerelor de locuri in plus sau in minus pe care le au masinile din parcul auto fata de normal(5 locuri)
-Afisarea tipului de caroserie pentru masinile din parcul auto cu precizarea celor berline:
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Integrarea Bazelor de Date cu Alte Tehnologii Informatice (ID: 116898)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
