You are on page 1of 9

ACADEMIA DE STUDII ECONOMICE

ECONOMICA FACULTATEA DE CIBERNETICA, STATISTICA SI INFORMATICA

Proiect Integrarea bazelor de date cu alte tehnologii informatic

pentru afaceri

STUDENT: BONCILA ANDREI Master Anul I Baze de date support Grupa 1071

1. Descrierea problemei de rezolvat


Studiul de caz i propune testarea funcionalitilor obiectuale ale PL/SQL, n vederea realizrii unei de aplicaie de gestionare a clientilor unei firme de telefonie mobila. Diagrama entitate-asociere de la care se pornete n vederea realizrii obiectivului propus este prezentat n Figura 1. Tipurile de obiecte pot fi create i gestionate conform diagramei i a regulilor specificate n cadrul acesteia.
Figura 1 Diagrama entitate-asociere

2. Schema bazei de date

Tipurile de obiecte pot fi cu uurin folosite pentru crearea tabelelor. Pentru prezentarea facilitilor obiectuale ale Oracle, studiul de caz se va focaliza pe entitatea Client i pe cele trei subentiti ale acesteia: Subscriptie, Oferta_subscriptie respectiv Adresa.

3.Exemplificri practice

Vom creea tipul ob_adresa_fact ce are drept atribute principalele componente ale unei adrese, iar metoda coninut, definit n zona de specificaii i detaliat n corpul tipului de obiecte, are rolul de a recompune adresa de facutare pe baza atributelor
CREATE OR REPLACE TYPE ob_adresa_fact AS OBJECT ( strada VARCHAR2(30), numar VARCHAR2(5), oras VARCHAR2(20), cod_postal VARCHAR2(6), MEMBER FUNCTION adresa_facturare RETURN VARCHAR2 ); CREATE OR REPLACE TYPE BODY ob_adresa_fact AS MEMBER FUNCTION adresa_facturare RETURN VARCHAR2 IS BEGIN RETURN (strada||' '|| numar||' '|| oras||' '|| cod_postal); END adresa_facturare; END;

Vom initializa si returna o instanta de tipul ob_adresa_fact:


DECLARE adresa ob_adresa_fact; BEGIN -- apelarea constructorului adresa:=ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'); DBMS_OUTPUT.PUT_LINE(adresa.adresa_facturare); END; /

Vom creea tabela adresa_facturare folosind obiectul creeat:


create table adresa of ob_adresa_fact;

Odat create, tipurile de obiecte pot fi utilizate i n cadrul comenzilor SQL de manipulare a datelor: comanda de interogare, respectiv cele de actualizare. Pentru specificarea valorilor unui obiect se vor folosi constructorul implicit sau cel suprancrcat, definit de utilizator.
INSERT INTO adresa Values ( ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'));

Vom creea acum tipul de obiect ob_client si o functie ce va returna eligibilitatea clientului :
CREATE OR REPLACE TYPE ob_client AS OBJECT ( client_id number(9), nume VARCHAR2(30), prenume VARCHAR2(20), adresa_facturare ob_adresa_fact, data date , MEMBER function elig_client return number ) not final; CREATE OR REPLACE TYPE BODY ob_client AS member function elig_client return number is varsta number:=0; begin if trunc(months_between(sysdate,data)/12)< 18 then varsta := -1; else varsta := trunc(months_between(sysdate,data)/12);

end if; if varsta<18 then dbms_output.put_line ('Nu este eligibil'); else dbms_output.put_line('Este eligibil'); end if; return varsta; end elig_client; end;

Vom initializa o instanta de tipul ob_client folosind si o instanta de tipul ob_adresa_fact:


DECLARE adresa ob_adresa_fact; varsta ob_client ; BEGIN -- apelarea constructorului adresa:=ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'); varsta:= ob_client('1781','Boncila','Andrei',adresa, to_date('07-021984','DD-MM-YYYY')); DBMS_OUTPUT.PUT_LINE(adresa.adresa_facturare); DBMS_OUTPUT.PUT_LINE(varsta.elig_client); END;

Vom creea tipul de obiect ob_subscriptie sub tipul de obiect ob_client si o procedura de verificare a status-ului :
CREATE OR REPLACE TYPE ob_subscriptie under ob_client ( subscriptie_id number(9), no_telefon VARCHAR2(10), status varchar2(1), MEMBER procedure client_activ (status_client varchar2) ) not final; CREATE OR REPLACE TYPE BODY ob_subscriptie AS member procedure client_activ (status_client varchar2) is begin if status='A' then dbms_output.put_line('Clientul '||subscriptie_id||' '||upper(nume)||' '||upper(prenume)||' '|| no_telefon||' este activ'); else dbms_output.put_line('Clientul nu este activ'); end if; dbms_output.put_line(status_client); end client_activ; end;

Vom initializa o instanta de tipul ob_subscriptie folosind si o instanta de tipul ob_adresa_fact:


DECLARE adresa ob_adresa_fact; status ob_subscriptie; status_client varchar2(200); BEGIN -- apelarea constructorului adresa:=ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'); status:= ob_subscriptie ('1781','Boncila','Andrei',adresa, to_date('07-021984','DD-MM-YYYY'),'1','0722953037','A'); status.client_activ(status_client);

END;

Ca ultima etapa vom creea un tip de obiect ob_oferta_subscriptie sub tipul ob_subscriptie:
CREATE OR REPLACE TYPE ob_oferta_subscriptie under ob_subscriptie ( cod_oferta varchar(10), nume_oferta VARCHAR2(20), data_activare date, cost number(4,2), overriding MEMBER procedure client_activ (status_client varchar2) ) not final; CREATE OR REPLACE TYPE BODY ob_oferta_subscriptie AS overriding member procedure client_activ (status_client varchar2) is begin if status='A' then dbms_output.put_line('Clientul '||subscriptie_id||' '||upper(nume)||' '||upper(prenume)||' '|| no_telefon||' este activ si are de plata'||cost); else dbms_output.put_line('Clientul nu este activ'); end if; dbms_output.put_line(status_client); end client_activ; end;

Vom initializa o instanta de tipul ob_oferta_subscriptie folosind toate atributele mostenite de la celelate 2 tipuri ob_subscriptie si ob_client:
DECLARE adresa ob_adresa_fact; status ob_oferta_subscriptie; status_client varchar2(200); BEGIN -- apelarea constructorului adresa:=ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'); status:= ob_oferta_subscriptie ('1781','Boncila','Andrei',adresa, to_date('07-02-1984','DD-MM-YYYY'),'1','0722953037','A','INTERNET', 'Oferte 100MB inclusi',to_date('29-02-2012','DD-MM-YYYY'),10.5);

status.client_activ(status_client);

END;

Vom creea o tabela pe baza tipului de obiect ob_oferta_subscriptie


create table client of ob_oferta_subscriptie;

Vom insera un rand in tabela:


insert into client Values (ob_oferta_subscriptie ('1781','Boncila','Andrei',ob_adresa_fact('Tudor Vladimirescu', '26', 'Ramnicu Valcea','012531'), to_date('07-02-1984','DD-MMYYYY'),'1','0722953037','A','INTERNET', 'Oferte 100MB inclusi',to_date('2902-2012','DD-MM-YYYY'),10.5)); commit;

Vom face update pe coloana adresa:


UPDATE client SET adresa_facturare = ob_adresa_fact('Bd.Magheru',12,'Bucuresti','12334') WHERE client_id = 1781; commit;

You might also like