Proiect PL/SQL obiectual
SCARLAT SIMONA ILEANA
1. Tema Pentru realizarea proiectului in PL/SQL obiectual am ales sa utilizez date din domeniul medical.
2. Descrierea In acest proiect am folosit trei tabele de baza pe care le-am populat corespunzator: MEDICI, SPECIALIZARI si INVESTIGATII, am creat patru clase de obiecte: obj_investigatie, obj_persoana, obj_medic si obj_pacient, iar pe baza acestor obiecte am creat tabelele: tbl_investigatie, tbl_medici si tbl_pacienti.
2.1 Tabele de baza Tabela SPECIALIZARI contine informatii privind categoriile de analize respectiv functiile medicilor unui spital Tabela INVESTIGATII contine informatii privind analizele ce se pot face la un laborator din cadrul unui spital Tabela MEDICI contine informatii cu privire la medicii unui spital. Crearea si popularea tabelei SPECIALIZARI se regasesc in scripturile de mai jos: CREATE TABLE SPECIALIZARI (ID_SPECIALIZARE NUMBER(5), NUME varchar2(50)); ALTER TABLE SPECIALIZARI ADD CONSTRAINT PK_ID_SPECIALIZARE PRIMARY KEY (ID_SPECIALIZARE); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('1','Alergologie si imunologie'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('2','Anatomie patologica'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('3','Biochimie'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('4','Biologie moleculara'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('5','Citologie'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('6','Electroliti'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('7','Enzime'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('8','Genetica'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('9','Hematologie laborator'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('10','Markeri endocrini'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('11','Markeri tumorali'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('12','Markeri virali'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('13','Microbiologie'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('14','Serologie si boli infectioase'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('15','Teste de toxicologie’); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('16','CHIRURGIE GENERALA'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('17','ORTOPEDIE SI TRAUMATOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('18','PNEUMOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('19','NEONATOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('20','ORL (OTORINOLARINGOLOGIE)'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('21','ANESTEZIE SI TERAPIE INTENSIVA'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('22','UROLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('23','OFTALMOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('24','MEDICINA DE FAMILIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('25','ENDOCRINOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES ('26','PSIHOLOGIE'); INSERT INTO specializari (ID_SPECIALIZARE, NUME) VALUES (’27','CARDIOLOGIE');
Crearea si popularea tabelei INVESTIGATII se regasesc in scripturile de mai jos: CREATE TABLE INVESTIGATII (ID_INVESTIGATIE number(5), ID_SPECIALIZARE number(5), NUME varchar2(60), PRET number(8,2)); ALTER TABLE INVESTIGATII ADD CONSTRAINT PK_ID_INVESTIGATIE PRIMARY KEY (ID_INVESTIGATIE); ALTER TABLE INVESTIGATII ADD CONSTRAINT FK_ID_SPECIALIZARE FOREIGN KEY (ID_SPECIALIZARE) REFERENCES SPECIALIZARI (ID_SPECIALIZARE) INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (1,1,'Ac anti aquaporina 4',255.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (2,1,'Ac anti cardiolipina IgM (ACLAM)',90.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (3,1,'Test Coombs Direct',30.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (4,3,'Acid uric seric',14.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (5,3,'Acizi Biliari (ser)',90.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (6,3,'Trigliceride',15.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (7,2,'Citologie din secretie mamelonara',80.00);
INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (8,2,'E-CADHERINA',110.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (9,2,'EXAMEN HISTOPATOLOGIC A DOUA OPINIE ( blocuri si lame )',300.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (10,4,'Amilaza Serica / Izoenzime',110.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (11,4,'Confirmare HTLV 1,2',167.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (12,4,'Detectia mutatiilor genetice asociate fibrozei chistice',2610.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (13,5,'Pachet BTS diagnostic avansat',340.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (14,5,'Pachet citologie leziuni col uterin',320.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (15,5,'Pachet screening leziuni col uterin',590.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (16,6,'Magneziu seric',14.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (17,7,'Lipaza (LIPA)',19.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (18,8,'Intoleranta la lactoza (test genetic)',420.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (19,9,'Determinare grup sangvin(A,B,O)',23.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (20,10,'Aldosteron seric',200.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (21,11,'Timidinikinaza',190.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (22,12,'Rujeola Ac IgM (MASME)',145.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (23,13,'Coprocultura',60.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (24,14,'Toxocara canis Ac IgG',90.00); INSERT INTO INVESTIGATII (ID_INVESTIGATIE,ID_SPECIALIZARE,NUME,PRET) VALUES (25,15,'Acid tricloracetic',40.00
Crearea si popularea tabelei MEDICI se regasesc in scripturile de mai jos: CREATE TABLE MEDICI (ID_MEDIC number(5), NUME varchar2(60),ID_SPECIALIZARE number(5),RECENZIE number(4,2),DATA_ANGAJARE date) ALTER TABLE MEDICI ADD CONSTRAINT PK_ID_MEDIC PRIMARY KEY (ID_MEDIC) ALTER TABLE MEDICI ADD CONSTRAINT FK_ID_SPECIALIZARE_M FOREIGN KEY (ID_SPECIALIZARE) REFERENCES SPECIALIZARI(ID_SPECIALIZARE) INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (1,'COPAESCU CATALIN',16,9.80,to_date('2013-10-06','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (2,'TOMULESCU VICTOR',16,9.67,to_date('2014-02-10','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (3,'PREDESCU VLAD',17,9.41,to_date('2010-11-12','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (4,'RAHIMIAN HADI',17,9.64,to_date('2015-10-06','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (5,'SURLEA VERONICA',18,9.64,to_date('2016-05-11','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (6,'SCHEINER MIHAELA',18,9.72,to_date('2013-10-03','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (7,'TOMULESCU VICTOR',19,9.67,to_date('2000-12-23','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (8,'ULMEANU DAN',20,9.73,to_date('2015-03-06','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (9,'TURCU FLORIN',21,9.27,to_date('2013-05-09','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (10,'BORDAS DANIEL',22,9.46,to_date('2012-10-18','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (11,'OPRISIU CARMEN',23,9.60,to_date('2013-10-19','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (12,'NITA GHEORGHE',24,9.92,to_date('2013-12-10','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (13,'GRIGORUTA SIMONA',25,9.75,to_date('2015-06-06','yyyy-mm-dd')); INSERT INTO MEDICI (ID_MEDIC, NUME, ID_SPECIALIZARE, RECENZIE, DATA_ANGAJARE) VALUES (14,' STANILA LAURA’,25,9.62,to_date('2013-10-28','yyyy-mm-dd'));
2.2 Clase de obiecte si tabele derivate din obiecte
CREARE OBIECT Crearea obiectului obj_investigatie ce contine subcategoriile de analize pe care le poate face un pacient intr-un laborator din cadrul unui spital, se regaseste in scripturile de mai jos: CREATE OR REPLACE TYPE obj_investigatie AS OBJECT ( id_investigatie number(5), denumire_specializare varchar2(70), denumire_investigatie varchar2(70), pret number(8,2), MEMBER FUNCTION INFORMATII_INVESTIGATIE RETURN VARCHAR2, STATIC FUNCTION CAUTA_INVESTIGATIE_PRET_MIN RETURN VARCHAR2, STATIC FUNCTION GENEREAZA_ID_INVESTIGATIE RETURN NUMBER, CONSTRUCTOR FUNCTION obj_investigatie ( p_specializare varchar2, p_investigatie varchar2, p_pret number) RETURN SELF AS RESULT ); CREATE OR REPLACE TYPE BODY obj_investigatie AS CONSTRUCTOR FUNCTION obj_investigatie ( p_specializare varchar2, p_investigatie varchar2, p_pret number) RETURN SELF AS RESULT IS BEGIN
self.denumire_specializare := p_specializare; self.denumire_investigatie := p_investigatie; self.pret := p_pret; RETURN; END; MEMBER FUNCTION INFORMATII_INVESTIGATIE RETURN VARCHAR2 IS BEGIN RETURN ('Denumire specializare: ' || denumire_specializare || ' Denumire investigatie: ' || denumire_investigatie || ' Pret: ' || pret); END INFORMATII_INVESTIGATIE; STATIC FUNCTION CAUTA_INVESTIGATIE_PRET_MIN RETURN VARCHAR2 IS v_pret_min investigatii.pret%TYPE; v_investigatie_pret_min investigatii.nume%TYPE; v_nr_inregistrari number; BEGIN v_investigatie_pret_min := 'Nu exista inregistrari'; SELECT COUNT(ID_INVESTIGATIE) INTO v_nr_inregistrari FROM INVESTIGATII; IF v_nr_inregistrari > 0 THEN SELECT MIN(PRET) INTO v_pret_min FROM INVESTIGATII; SELECT nume INTO v_investigatie_pret_min FROM INVESTIGATII WHERE PRET = v_pret_min; END IF; RETURN v_investigatie_pret_min; END CAUTA_INVESTIGATIE_PRET_MIN; STATIC FUNCTION GENEREAZA_ID_INVESTIGATIE RETURN NUMBER IS v_id_generat number; BEGIN select dbms_random.value(1,10000) num INTO v_id_generat from dual; RETURN v_id_generat; END GENEREAZA_ID_INVESTIGATIE; END;
CREARE TABELA PE BAZA OBIECTELUI Pe baza obiectului obj_investigatie, a fost creata tabela tbl_investigatie si a fost populata cu inregistrarile din tabelelor de baza INVESTIGATII si SPECIALIZARI. CREATE TABLE tbl_investigatie OF obj_investigatie INSERT INTO tbl_investigatie SELECT i.id_investigatie, (SELECT NUME FROM SPECIALIZARI WHERE ID_SPECIALIZARE = i.id_specializare),i.nume,i.pret FROM INVESTIGATII I
INTEROGARI Pentru interogarea tuturor metodelor declarate in obiectul obj_investigatie, a fost folosit urmatorul script de PL/SQL: SET SERVEROUTPUT ON DECLARE investigatie1 obj_investigatie; BEGIN investigatie1 := obj_investigatie ('Serologie boli infectioase','Virus Herpetic Tip 1/2 Adn In Sange',300); DBMS_OUTPUT.PUT_LINE('Obiectul investigatie1 a fost creat'); DBMS_OUTPUT.PUT_LINE(investigatie1.INFORMATII_INVESTIGATIE); investigatie1.id_investigatie := obj_investigatie.GENEREAZA_ID_INVESTIGATIE; DBMS_OUTPUT.PUT_LINE('S-a generat id-ul investigatiei ca fiind: ' || investigatie1.id_investigatie); DBMS_OUTPUT.PUT_LINE('Investigatia cea mai ieftina pe care o oferim este: ' || obj_investigatie.CAUTA_INVESTIGATIE_PRET_MIN ); END; In urma rularii scriptului de interogare a rezultat urmatorul output :
CREARE OBIECT Crearea obiectului parinte obj_persoana a avut ca scop inglobarea caracteristicilor comune pentru obiectele ce au fost derivate ulterior din acesta: obj_medic si obj_pacient.
create or replace TYPE obj_persoana AS OBJECT ( id_persoana number(5), nume varchar2(60), CONSTRUCTOR FUNCTION obj_persoana (p_nume varchar2) RETURN SELF AS RESULT, STATIC FUNCTION GENEREAZA_ID RETURN NUMBER, MEMBER FUNCTION VALIDEAZA_NUME (p_nume varchar2) RETURN boolean ) NOT FINAL; create or replace TYPE BODY obj_persoana AS CONSTRUCTOR FUNCTION obj_persoana (p_nume varchar2) RETURN SELF AS RESULT IS BEGIN self.nume := p_nume; RETURN; END; STATIC FUNCTION GENEREAZA_ID RETURN NUMBER IS v_id_generat number; BEGIN select dbms_random.value(1,10000) num INTO v_id_generat from dual; RETURN v_id_generat; END GENEREAZA_ID; MEMBER FUNCTION VALIDEAZA_NUME (p_nume varchar2) RETURN boolean IS v_nume varchar2(25); BEGIN select regexp_instr(p_nume,'[^0].*') into v_nume from dual; IF v_nume = '' THEN RETURN TRUE; ELSE RETURN FALSE; END IF; END VALIDEAZA_NUME; END;
CREARE OBIECT Crearea obiectului obj_medic s-a facut prin mostenirea obiectului obj_persoana:
create or replace TYPE obj_MEDIC UNDER obj_persoana ( specializare varchar2(70), recenzie number(4,2), data_angajare date, CONSTRUCTOR FUNCTION obj_MEDIC (p_id_persoana number, p_nume varchar2, p_specializare varchar2, p_recenzie number) RETURN SELF AS RESULT, MEMBER PROCEDURE ACTUALIZEAZA_MEDIC, MEMBER PROCEDURE STERGE_MEDIC ) FINAL; create or replace TYPE BODY obj_medic AS CONSTRUCTOR FUNCTION obj_medic (p_id_persoana number, p_nume varchar2, p_specializare varchar2, p_recenzie number) RETURN SELF AS RESULT IS v_today date; BEGIN SELECT SYSDATE INTO v_today FROM DUAL; self.id_persoana := p_id_persoana; self.nume := p_nume; self.specializare := p_specializare; self.recenzie := p_recenzie; self.data_angajare := v_today; RETURN; END; MEMBER PROCEDURE ACTUALIZEAZA_MEDIC IS BEGIN UPDATE TBL_MEDICI SET RECENZIE = recenzie WHERE NUME = nume; UPDATE TBL_MEDICI SET SPECIALIZARE = specializare where NUME = nume; END ACTUALIZEAZA_MEDIC; MEMBER PROCEDURE STERGE_MEDIC IS BEGIN DELETE FROM tbl_medici WHERE NUME = nume; END STERGE_MEDIC; END;
CREARE TABELA PE BAZA OBIECTELUI Pe baza clasei de obiecte obj_medic, a fost creata tabela tbl_MEDICI si a fost populata cu inregistrarile tabelelor SPECIALIZARI si MEDICI. CREATE TABLE tbl_MEDICI OF obj_medic INSERT INTO tbl_medici SELECT m.id_medic, m.nume, (SELECT nume FROM SPECIALIZARI WHERE id_specializare = m.id_specializare), m.recenzie, m.data_angajare FROM MEDICI m
INTEROGARI Pentru interogarea tuturor metodelor obiectului obj_medic a fost conceput urmatorul script: SET SERVEROUTPUT ON DECLARE medic1 obj_medic; v_medic_recenzie_ant number(4,2); v_medic_specializare_ant varchar2(50); v_bool boolean; BEGIN medic1 := obj_medic(100,'COPAESCU CATALIN1','ORTOPEDIE SI TRAUMATOLOGIE', 9); DBMS_OUTPUT.PUT_LINE('S-a creat obiectul medic 1: ' || medic1.nume || ' ' || medic1.id_persoana || ' '|| medic1.specializare || ' '|| medic1.recenzie ||' ' || medic1.data_angajare); v_bool := medic1.VALIDEAZA_NUME(medic1.nume); IF v_bool THEN DBMS_OUTPUT.PUT_LINE('Este valid numele medicului: TRUE'); ELSE DBMS_OUTPUT.PUT_LINE('Este valid numele medicului: FALSE'); END IF; medic1.id_persoana := obj_persoana.GENEREAZA_ID; DBMS_OUTPUT.PUT_LINE('S-a atribuit un id lui medic1: ' || medic1.id_persoana); medic1.nume := 'COPAESCU CATALIN'; SELECT recenzie INTO v_medic_recenzie_ant FROM TBL_MEDICI WHERE NUME = medic1.nume; SELECT specializare INTO v_medic_specializare_ant FROM TBL_MEDICI WHERE NUME = medic1.nume; DBMS_OUTPUT.PUT_LINE('Recenzie anterioara: ' || v_medic_recenzie_ant || ' ' || ' Specializare anterioara: ' || v_medic_specializare_ant); medic1.ACTUALIZEAZA_MEDIC; DBMS_OUTPUT.PUT_LINE('Medicul a fost actualizat ' || medic1.recenzie || ' ' || medic1.specializare); medic1.STERGE_MEDIC; DBMS_OUTPUT.PUT_LINE('Medicul a fost sters'); END;
In urma rularii scriptului de interogare a rezultat urmatorul output:
CREARE OBIECT Crearea clasei de obiecte obj_pacient s-a realizat prin mostenirea obiectului obj_persoana.
create or replace TYPE obj_pacient UNDER obj_persoana ( varsta number, CONSTRUCTOR FUNCTION obj_pacient (p_id number, p_nume varchar2) RETURN SELF AS RESULT, MEMBER PROCEDURE ADAUGA_PACIENT, STATIC FUNCTION NUMAR_PACIENTI RETURN NUMBER, MEMBER FUNCTION AFISEAZA_PACIENT RETURN VARCHAR2 ) FINAL; create or replace TYPE BODY obj_pacient AS CONSTRUCTOR FUNCTION obj_pacient (p_id number, p_nume varchar2) RETURN SELF AS RESULT IS BEGIN self.id_persoana := p_id; self.nume := p_nume; self.varsta := 23; RETURN; END; MEMBER PROCEDURE ADAUGA_PACIENT IS BEGIN INSERT INTO TBL_PACIENTI (id_persoana, nume, varsta) VALUES (id_persoana, nume, varsta);
END ADAUGA_PACIENT; STATIC FUNCTION NUMAR_PACIENTI RETURN NUMBER IS v_numar number; BEGIN SELECT COUNT(*) INTO v_numar FROM TBL_PACIENTI; RETURN v_numar; END NUMAR_PACIENTI; MEMBER FUNCTION AFISEAZA_PACIENT RETURN VARCHAR2 IS BEGIN RETURN (id_persoana || ' ' || nume || ' ' || varsta); END AFISEAZA_PACIENT; END;
CREARE TABELA PE BAZA OBIECTELUI CREATE TABLE TBL_PACIENTI OF obj_pacient
INTEROGARI Pentru interogarea tuturor metodelor obiectului obj_pacient a fost realizat urmatorul script: set serveroutput on declare pacient1 obj_pacient; begin pacient1 := obj_pacient (100,'Stanescu Mihai',18); pacient1.ADAUGA_PACIENT; DBMS_OUTPUT.PUT_LINE(pacient1.AFISEAZA_PACIENT); DBMS_OUTPUT.PUT_LINE('Numar pacienti: ' || obj_pacient.NUMAR_PACIENTI); end;
3. Schema conceptuala In figura de mai jos se regaseste schema conceptuala a tabelelor de baza:
In figura de mai jos se regaseste schema conceptuala a obiectelor create:
In figura de mai jos de regaseste schema conceptuala a tabelelor derivate din obiecte: