Sunteți pe pagina 1din 5

BDOO - EXEMPLU

Diagrama de clase detaliat pentru pachetul P_Angajai

Diagrama de clase detaliat pentru pachetul P_Comenzi

Implementarea bazei de date presupune implementarea claselor ntr-un SGBDOO, stabilirea modului de asigurare a persisten ei obiectelor !i elaborarea programelor pentru manipularea acestora n "ederea reali#$rii %unc iunilor sistemului n ansamblul s$u& 'om pre#enta n continuare modalit$ ile de implementare n SGBD Oracle (SGBD rela ional e)tins cu %acilit$ i obiectuale* a claselor detaliate anterior utili#+nd tipurile obiect, iar pentru asigurarea persisten ei se "or utili#a tabelele de obiecte& ,mplementarea claselor se "a reali#a prin crearea de tipuri de obiecte pentru %iecare dintre acestea& Pentru clasa CDepartamente "om a"ea urm$toarea implementare-

CREATE OR REPLACE TYPE departamente_o AS OBJECT ( id_departament NUMBER, denumire_departament VARC AR!("#$, id_mana%er NUMBER, STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i(p_id_dep NUMBER$ RETURN NUMBER $,

.rearea tabelei departamente_t pe ba#a de%ini iei clasei departamente_o-

CREATE TABLE departamente_t O' departamente_o,

Popularea tabelei se poate reali#a asem$n$tor cu modalitatea de populare a tabelelor rela ionale-

&NSERT &NTO departamente_t SELECT d-id_departament, d-denumire_departament, d-id_mana%er 'ROM departamente d ,

.rearea tipului de obiecte functii_o !i a tabelei asociate se reali#ea#$ asem$n$tor-

CREATE OR REPLACE TYPE .un(tii_o AS OBJECT ( &/_'UNCT&E VARC AR!(0#$, /ENUM&RE_'UNCT&E VARC AR!(1"$,

SALAR&U_M&N NUMBER(2$, SALAR&U_MA3 NUMBER(2$, STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i(p_id_.un( NUMBER$ RETURN NUMBER $, CREATE TABLE .un(tii_t O' .un(tii_o,

.lasa CAngajati are urm$toarea implementare prin crearea tipului de obiecte Angajati_o !i a tabelei obiect asociate-

CREATE OR REPLACE TYPE an%a4ati_o AS OBJECT ( &/_AN5AJAT NUMBER(2$, PRENUME VARC AR!(!#$, NUME VARC AR!(!"$, EMA&L VARC AR!(!"$, TELE'ON VARC AR!(!#$, /ATA_AN5AJARE /ATE, &/_'UNCT&E VARC AR!(0#$, SALAR&UL NUMBER(6,!$, COM&S&ON NUMBER(!,!$, &/_MANA5ER NUMBER(2$, &/_/EPARTAMENT NUMBER(7$, MEMBER 'UNCT&ON (a)(u)ea*a_8onu+ RETURN NUMBER, MEMBER 'UNCT&ON (a)(u)ea*a_ta9e RETURN NUMBER, MEMBER 'UNCT&ON (a)(u)ea*a_:enituri_tota)e RETURN NUMBER, STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i (p_id_an% NUMBER$ RETURN NUMBER $, CREATE TABLE an%a4ati_t O' an%a4ati_o,

,mplementarea metodelor din clase se reali#ea#$ n corpul tipului de obiecte (object type body* al %iec$rui tip n parte&

CREATE OR REPLACE TYPE BO/Y departamente_o &S STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i (p_id_dep NUMBER$ RETURN NUMBER &S :_nr_an% num8er, BE5&N SELECT (ount(;$ &NTO :_nr_an% 'ROM an%a4ati_t a < ERE a-id_departament=p_id_dep, RETURN :_nr_an%, EN/, EN/, CREATE OR REPLACE TYPE BO/Y .un(tii_o &S STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i (p_id_.un( NUMBER$ RETURN NUMBER &S :_nr_an% num8er, BE5&N SELECT (ount(;$ &NTO :_nr_an% 'ROM an%a4ati_t a

< ERE a-id_.un(tie=p_id_.un(, RETURN :_nr_an%, EN/, EN/,

Putem interoga tabela Departamente_t pentru a a%i!a pentru %iecare departament denumirea !i num$rul de anga/a i, returnat de apelul %unc iei calculeaza_statistici-

SELECT id_departament, denumire_departament, departamente_o-(a)(u)ea*a_+tati+ti(i(id_departament$ 'ROM departamente_t,

0pelul %unc iilor din tipurile obiect se poate reali#a !i prin intermediul unui bloc PL1S2L& De e)emplu, se poate apela %unc ia calculeaz_statistici din clasa CDepartamente pentru a%i!area num$rului de anga/a i din departamentul 34 ast%el-

/ECLARE :_nr NUMBER, BE5&N :_nr>=departamente_o-(a)(u)ea*a_+tati+ti(i("#$, /BMS_OUTPUT-PUT_L&NE(:_nr$, EN/, ?

Metodele clasei CAngajati se "or implementa n cadrul corpului tipului de obiecte Angajati_o ast%el-

CREATE OR REPLACE TYPE BO/Y an%a4ati_o &S @@ .un(tia mem8ru (a)(u)ea*a_8onu+ MEMBER 'UNCT&ON (a)(u)ea*a_8onu+ RETURN NUMBER &S BE5&N RETURN SEL'-+a)ariu);NVL(SEL'-(omi+ion,#$, EN/, @@ .un(tia mem8ru (a)(u)ea*a_:enituri_tota)e MEMBER 'UNCT&ON (a)(u)ea*a_:enituri_tota)e RETURN NUMBER &S BE5&N RETURN SEL'-+a)ariu);(0ANVL(SEL'-(omi+ion,#$$, EN/, @@ .un(tia mem8ru (a)(u)ea*a_ta9e MEMBER 'UNCT&ON (a)(u)ea*a_ta9e RETURN NUMBER &S BE5&N

RETURN (a)(u)ea*a_:enituri_tota)e;#-02, EN/, @@ .un(tia (a)(u)ea*a_+tati+ti(i STAT&C 'UNCT&ON (a)(u)ea*a_+tati+ti(i (p_id_an% num8er$ RETURN num8er &S :_nr_(omen*i num8er, BE5&N SELECT COUNT(;$ &NTO :_nr_(omen*i 'ROM (omen*i_t ( < ERE (-id_an%a4at=p_id_an%, RETURN :_nr_(omen*i, EN/, EN/,

0pelul %unc iilor membre ale tipului de obiecte Angajati_o se %ace utili#+nd constructorul implicit al clasei prin preci#area tuturor atributelor sale-

SELECT nume, +a)ariu), an%a4ati_o-(a)(u)ea*a_+tati+ti(i (id_an%a4at$ Tota)_(omen*i, an%a4ati_o(&/_AN5AJAT,PRENUME, NUME, EMA&L,TELE'ON, /ATA_AN5AJARE,&/_'UNCT&E, SALAR&UL, COM&S&ON, &/_MANA5ER, &/_/EPARTAMENT$-(a)(u)ea*a_8onu+($ 8onu+, an%a4ati_o(&/_AN5AJAT,PRENUME, NUME, EMA&L,TELE'ON, /ATA_AN5AJARE,&/_'UNCT&E, SALAR&UL, COM&S&ON, &/_MANA5ER, &/_/EPARTAMENT$-(a)(u)ea*a_:enituri_tota)e($ tota)_:enituri, an%a4ati_o(&/_AN5AJAT,PRENUME, NUME, EMA&L,TELE'ON, /ATA_AN5AJARE,&/_'UNCT&E, SALAR&UL, COM&S&ON, &/_MANA5ER, &/_/EPARTAMENT$-(a)(u)ea*a_ta9e($ ta9e 'ROM an%a4ati_t,