Sunteți pe pagina 1din 13

Academia de Studii Economice din București

Facultatea de Cibernetica, Statistica și Informatica Economica


Specializarea Informatica Economica

Proiect Oracle Obiectual PL SQL


Sisteme de baze de date

Student
Ileana Daniela Gheorghe
Grupa 1116

București 2020
Schema bazei de date

Tabela PERSOANE
CREATE TABLE PERSOANE

(CNP VARCHAR2(13),

NUME VARCHAR2(50),

PRENUME VARCHAR2(50),

DATA_NASTERE DATE)

Tabela ABONATI
CREATE TABLE ABONATI

(ID_ABONAT NUMBER PRIMARY KEY,

CNP VARCHAR2(13),

NUME VARCHAR2(50),

PRENUME VARCHAR2(50),

DATA_NASTERE DATE,

USERNAME VARCHAR2(20),

PAROLA VARCHAR2(20));
insert into ABONATI values(1,'1234567891011','Calota', 'Cornel', to_date('1995-02-10','yyyy-
mm-dd'),'ccornel', 'ccornel');

insert into ABONATI values(2,'2234567891011','Nicorescu', 'Maria', to_date('1980-12-12','yyyy-


mm-dd'),'nmaria', 'nmaria');

insert into ABONATI values(3,'2154567891011','Dumitrescu', 'Sonia', to_date('1990-05-20','yyyy-


mm-dd'),'dsonia', 'dsonia');

insert into ABONATI values(4,'2961101284547','Gheorghe', 'Ileana', to_date('1996-01-01','yyyy-


mm-dd'),'gileana', 'gileana');

insert into ABONATI values(5,'1154787891213','Popescu', 'Florin', to_date('1992-07-15','yyyy-


mm-dd'),'pflorin', 'pflorin');

Tabela ABONAMENTE
create table ABONAMENTE

(ID_ABONAMENT NUMBER PRIMARY KEY,

NUME_ABONAMENT VARCHAR2(50),

NR_MINUTE NUMBER,

INTERNET NUMBER,

COST_ABONAMENT NUMBER(10,2),

COST_APEL NUMBER(10,2));

insert into ABONAMENTE values(1,'RED 10', 10000,10, 50,0.05);

insert into ABONAMENTE values(2,'RED 20', 20000,20, 60,0.05);

insert into ABONAMENTE values(3,'RED 30', 30000,30, 70,0.05);

insert into ABONAMENTE values(4,'RED 40', 40000,40, 80,0.05);

insert into ABONAMENTE values(5, 'RED 70',70000,70, 90,0.05);

Tabela CONTRACTE
create table CONTRACTE

(ID_CONTRACT NUMBER PRIMARY KEY,

ID_ABONAT NUMBER,
ID_ABONAMENT NUMBER ,

DATA_ACTIVARE DATE,

DURATA NUMBER);

ALTER TABLE CONTRACTE

ADD FOREIGN KEY (ID_ABONAT) REFERENCES ABONATI(ID_ABONAT);

ALTER TABLE CONTRACTE

ADD FOREIGN KEY (ID_ABONAMENT) REFERENCES ABONAMENTE(ID_ABONAMENT);

insert into CONTRACTE values (1,1,4, to_date('2017-02-15','yyyy-mm-dd'), 48);

insert into CONTRACTE values (2,2,1, to_date('2019-05-26','yyyy-mm-dd'), 12);

insert into CONTRACTE values (3,3,5, to_date('2018-09-16','yyyy-mm-dd'), 24);

insert into CONTRACTE values (4,4,5, to_date('2016-08-15','yyyy-mm-dd'), 48);

insert into CONTRACTE values (5,5,2, to_date('2018-05-01','yyyy-mm-dd'), 36);.

Crearea tipurilor de obiecte


Creare obiect obj_abonamente
create or replace type obj_abonamente as object

(ID_ABONAMENT NUMBER,

NUME_ABONAMENT VARCHAR2(50),

NR_MINUTE NUMBER,

INTERNET NUMBER,

COST_ABONAMENT NUMBER(10,2),

COST_APEL NUMBER(10,2),

member function afiseaza_detalii return varchar2,

static function abonament_max_internet return varchar2,

static function cel_mai_ieftin_abonament return number,

constructor function obj_abonamente(p_id number,p_nume varchar2, p_minute number,


p_internet number,
p_cost_abonament number, p_cost_apel number) return self as result);

Creare obiect obj_persoana


CREATE OR REPLACE TYPE obj_persoana AS OBJECT

(CNP VARCHAR2(13),

NUME VARCHAR2(50),

PRENUME VARCHAR2(50),

DATA_NASTERE DATE,

member function afiseaza_varsta RETURN varchar2,

static function validare_cnp (p_cnp varchar2) return boolean,

constructor function obj_persoana(p_cnp varchar2, p_nume varchar2, p_prenume varchar2,


p_data date)

return self as result

) not final;

Creare obiect obj_abonati


Obiectul abonati este derivate din obiectul persoana.

CREATE OR REPLACE TYPE obj_abonati UNDER obj_persoana


(ID_ABONAT NUMBER,

USERNAME VARCHAR2(20),

PAROLA VARCHAR2(20),

constructor function obj_abonati (p_cnp varchar2, p_nume varchar2, p_prenume varchar2,


p_data date,

p_id_abonat number, p_username varchar2, p_parola varchar2) return self as result,

member procedure modifica_date_abonat,

member procedure adauga_abonat );

Creare obiect obj_contracte


create or replace type obj_contracte as object

(ID_CONTRACT NUMBER,

ID_ABONAT NUMBER,

ID_ABONAMENT NUMBER ,

DATA_ACTIVARE DATE,

DURATA NUMBER,

constructor function obj_contracte (p_id_contract number,p_id_abonat number,


p_id_abonament number,

p_durata number) return self as result,

member procedure adauga_contract,

static function numar_contracte return number,

static function afisare_nrcontracte_expirate return number,

member procedure sterge_contract,


member function afiseaza_contract return varchar2);

Crearea tabelelor pe baza obiectelor


Creare tabela abonamente
create table tabela_abonamente of obj_abonamente;

insert into tabela_abonamente

select a.id_abonament, a.nume_abonament, a.nr_minute,

a.internet, a.cost_abonament, a.cost_apel from abonamente a;

Creare tabela abonati


create table tabela_abonati of obj_abonati;

insert into tabela_abonati

select a.cnp, a.nume, a.prenume,

a.data_nastere, a.id_abonat, a.username, a.parola from abonati a;


Creare tabela contracte
create table tabela_contracte of obj_contracte;

insert into tabela_contracte

select c.id_contract, c.id_abonat, c.id_abonament,

c.data_activare, c.durata from contracte c;

Crearea corpului obiectelor


Corpul obiectului obj_abonamente
create or replace type body obj_abonamente as
member function afiseaza_detalii return varchar2 is
begin
return ('Nume abonament: '||nume_abonament||', nr minute: '||nr_minute||
', internet '||internet||', cost abonament: '||cost_abonament||'.');
end afiseaza_detalii;
static function abonament_max_internet return varchar2 is
v_max tabela_abonamente.internet%type;
v_text varchar2(50);
v_nrinreg number;
begin
select count(*) into v_nrinreg from tabela_abonamente;
v_text:='Nu exista inregistrari';
if (v_nrinreg>0) then
select max(internet) into v_max from tabela_abonamente;
v_text:='Maximul de internet folosit este '+v_max;
end if;
return v_text;
end abonament_max_internet;
member function cel_mai_ieftin_abonament return number is
v_min tabela_abonamente.cost_abonament%type;
v_nrinreg number;
begin
select count(*) into v_nrinreg from tabela_abonamente;
if (v_nrinreg>0) then
select min(cost_abonament) into v_min from tabela_abonamente;
else
v_min:=0;
end if;
return v_min;
end cel_mai_ieftin_abonament;
constructor function obj_abonamente(p_id number,p_nume varchar2, p_minute number,
p_internet number,
p_cost_abonament number, p_cost_apel number) return self as result is
begin
self.id_abonament:=p_id;
self.nume_abonament:=p_nume;
self.nr_minute:=p_minute;
self.internet:=p_internet;
self.cost_abonament:=p_cost_abonament;
self.cost_apel:=p_cost_apel;
return;
end;
end;
Corpul obiectului obj_persoana
create or replace type body obj_persoana
as
member function afiseaza_varsta RETURN varchar2
is
BEGIN
RETURN 'Nume:'|| self.nume || ' ' ||self.prenume || 'Varsta: ' ||
trunc((months_between(sysdate, self.data_nastere))/12)|| ' ani.';
END;
static function validare_cnp (p_cnp varchar2) return boolean
is
begin
if (length(p_cnp)>13) then
return false;
else
return true;
end if;
end;
constructor function obj_persoana(p_cnp varchar2, p_nume varchar2, p_prenume varchar2,
p_data date)
return self as result
is
begin
self.cnp:=p_cnp;
self.nume:=p_nume;
self.prenume:=p_prenume;
self.data_nastere:=p_data;
return;
end;
end;
Corpul obiectului obj_abonati
create or replace type body obj_abonati as
constructor function obj_abonati (p_cnp varchar2, p_nume varchar2, p_prenume varchar2,
p_data date,
p_id_abonat number, p_username varchar2, p_parola varchar2)
return self as result
is begin
self.cnp:=p_cnp;
self.nume:=p_nume;
self.prenume:=p_prenume;
self.data_nastere:=p_data;
self.id_abonat:=p_id_abonat;
self.username:=p_username;
self.parola:=p_parola;
return;
end;
member procedure modifica_date_abonat is
begin
update tabela_abonati set nume=nume where id_abonat=id_abonat;
update tabela_abonati set parola=parola where id_abonat=id_abonat;
end modifica_date_abonat;
member procedure adauga_abonat is
v_id tabela_abonati.id_abonat%type;
begin
select nvl(max(id_abonat),0)+1 into v_id from tabela_abonati;
insert into tabela_abonati values
(cnp, nume, prenume, data_nastere, v_id, username, parola);
end adauga_abonat;
end;
Corpul obiectului obj_contracte
create or replace type body obj_contracte as
constructor function obj_contracte (p_id_contract number,p_id_abonat number,
p_id_abonament number,
p_durata number) return self as result
is
v_date date;
begin
select sysdate into v_date from dual;
self.id_contract:=p_id_contract;
self.id_abonat:=p_id_abonat;
self.id_abonament:=p_id_abonament;
self.data_activare:=v_date;
self.durata:=p_durata;
return;
end;
member procedure adauga_contract is
v_id tabela_contracte.id_contract%type;
v_astazi date;
begin
select sysdate into v_astazi from dual;
select nvl(max(id_contract),0)+1 into v_id from tabela_contracte;
insert into tabela_contracte values( v_id, id_abonat, id_abonament,
v_astazi, durata);
end adauga_contract;
static function numar_contracte return number is
nr number;
begin
select count(*) into nr from tabela_contracte;
return nr;
end numar_contracte;
static function afisare_nrcontracte_expirate return number
is
nr number;
begin
select count(*) into nr from tabela_contracte
where add_months(data_activare, durata)<sysdate;
return nr;
end afisare_nrcontracte_expirate;
member procedure sterge_contract is begin
delete from tabela_contracte where id_contract=self.id_contract;
end sterge_contract;
member function afiseaza_contract return varchar2
is
nume_abonat tabela_abonati.nume%type;
prenume_abonat tabela_abonati.prenume%type;
nume_abonament tabela_abonamente.nume_abonament%type;
begin
select nume, prenume into nume_abonat, prenume_abonat
from tabela_abonati a, tabela_contracte c
where c.id_abonat=a.id_abonat and c.id_contract=self.id_contract;
select nume_abonament into nume_abonament
from tabela_abonamente a, tabela_contracte c
where c.id_abonament=a.id_abonament and c.id_contract=self.id_contract;

return ('Client '||nume_abonat||' '||prenume_abonat||' cu abonament '||


nume_abonament||' cu durata '|| self.durata||' luni');
end afiseaza_contract;
end;

Interogarea obiectelor
Interogari abonati
Interogari abonamente
set serveroutput on
declare
ab obj_abonamente;
begin
ab:=obj_abonamente(6,'RED 10', 100, 100, 10, 5);
dbms_output.put_line(ab.afiseaza_detalii);
dbms_output.put_line(obj_abonamente.abonament_max_internet);
dbms_output.put_line('Cel mai ieftin abonament costa :
'||obj_abonamente.cel_mai_ieftin_abonament||' lei');
end;
Interogari contracte

S-ar putea să vă placă și