Sunteți pe pagina 1din 29

Informatic-Economic

Brag Ionela-Cristiana
Seria A - Grupa 1033

GESTIUNEA UNUI SPITAL


I. Descrierea bazei de date
St Andrew's Hospital
O baz de date memoreaz informaii despre seciile, medicii
i pacienii, unui spital din Marea Britanie. Internarea se
realizeaz, att pe baza unei recomandri fcute de medicul de
familie, ct i a unei confirmri din partea unui specialist existent
n spital. La internare sunt nregistrate datele personale ale
pacienilor, iar o fi separat, ine evidena investigaiilor fcute
pe perioada internrii cu tratamentul aplicat. Medicii sunt
specialiti n diverse ramuri i pot avea mai muli pacieni sub
supraveghere.

Baza de date trebuie s asigure gestionarea corespunztoare


a tuturor datelor referitoare la medicamentele i produsele
stocate in depozitele spitalului si inventarul acestuia, ct i la
listarea pacienilor in funcie de id-ul medicului, data internrii,
data externrii, diagnostic sau tratament.

Reguli structurale
Intrucat spitalul din Marea Britanie are mai multe secii,
unde la rndul lor, au mai muli medici, trebuie reinute
informaii despre medici si sectii.

Totodat trebuie reinute informaii despre pacienii


spitalului, despre fele de medic i despre investigaiile care
rezulta dup cercetari amnunite. Pe baza unui tratament
prescris de un medic, dupa investigatie, pacientul primeste
anumite medicamente.

Baza mea de date contine, deci 7 entitati, denumirea lor fiind


cuvintele bold-uite in descrierea anterioara. Initial in structura,

1
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
regaseam o relatie M:M intre pacienti si medici, insa aceasta a
disparut prin entitatea fise_medici, iar acum avem relatii 1:M.
Pentru o intelegere mai exacta, am explicitat legaturile dintre
entitati:
Fiecare secie trebuie s aib unul sau mai muli medici.
Fiecare medic trebuie s apartin unei singure secii.
Fiecare medic trebuie s aib unul sau mai muli pacieni.
Fiecare pacient trebuie s apartin unuia sau mai multor medici.
Fiecare medic trebuie s aib una sau mai multe fie.
Fiecare fi trebuie s apartin unui singur medic.
Fiecare fi trebuie s realizeze una sau mai multe investigaii.
Fiecare investigaie trebuie s apartin unei singure fie.
Fiecare investigaie necesit unul sau mai multe medicamente.
Fiecare medicament trebuie s apartin uneia sau mai multor investigaii.

Prin modelarea entitatilor in SQL Developer, acestea au


devenit tabele si au urmatoarele atribute si restrictii.

Secii (deine informaii despre seciile din cadrul spitalului


din Marea Britanie): id_secie (cu restrictie de cheie primara
PK si de NOT NULL), nume_sectie (unique);

Medici (deine informaii despre medicii din cadrul fiecrei


secii): id_medic(PK si NOT NULL), nume, prenume,
specializare, data_naterii, id_sectie(cheie straina FK);

Pacienti (deine informaii despre pacienii spitalului)


id_pacient (PK si NOT NULL), nume, prenume, adres;

Fie_medici (detine informaii despre colaborarea unui medic


cu un pacient): id_fia (PK), data_internrii, data_exterrii,
id_medic(FK), id_pacient(FK);

Investigaii (deine informaii despre investigaia realizat


avand la baza informatiile fisei):id_investigaie(PK),
rezultat,id_fisa(FK);

Medicament (deine informaii despre medicamentele


existente n spital): id_medicament(PK), denumire, prospect;

2
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
Tratamente (detine informatii despre tratamentul, pe care un
pacient trebuie sa-l urmeze, rezultat din investigatie, unde s-
au prescris medicamente): id_tratament(PK), doza,
id_medicament(FK), id_investigatie(FK).

Observand explicitarea relatiilor de mai sus, observm c nu exist


dependene tranzitive. Deci relaiile sunt n forma normal 3, de unde rezult ca
baza de date este n FN3.

Toate aceste explicatii le puteti vizualiza mai bine in schema conceptuala de


mai jos, dar si in print screen-urile realizate, atat asupra tabelelor, cat si a
restrictiilor.

II. Schema conceptuala

SECTII MEDICI PACIENTI


are
ID_SECTIE ID_MEDIC ID_PACIENT
dfc
NUMBER(5)PK NUMBER(5)PK NUMBER(5)PK
NUME NUME NUME_PACIENT
VARCHAR2(25) VARCHAR2(25) VARCHAR2(25)
PRENUME PRENUME_PACIENT
apartine
VARCHAR2(25) VARCHAR2(25)
SPECIALIZARE ADRESA
VARCHAR2(25)

FISE_MEDICI

ID_FISA
realizeaza
NUMBER(5)PK
DATA_INTERNARII DATE
apartine
DATA_EXTERNARII DATE
ID_MEDIC
NUMBER(5)FK
ID_PACIENT

MEDICAMENTE
ID_MEDICAMENT INVESTIGATII
NUMBER(5)PK
DENUMIRE
VARCHAR2(25)
3
PROSPECT
VARCHAR2(25)
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

are ID_INVESTIGATIE
NUMBER(5)PK
este realizata
REZULTAT
VARCHAR2(25)
apartine ID_FISA
NUMBER(5)FK

TRATAMENTE
ID_TRATAMENT
necesita NUMBER(5)PK
apartine DOZA
VARCHAR2(25)
ID_MEDICAMENT
NUMBER(5)FK
ID_INVESTIGATII
III. CREAREA TABELELOR
NUMBER(5)FK- restrictii de integritate-
1. SECTII

create table SECTII


(
ID_SECTIE NUMBER(5),
NUME_SECTIE VARCHAR2(25)
);
alter table SECTII
add constraint ID_SECTIE_PK primary key (ID_SECTIE);
alter table SECTII
add constraint ID_SECTIE_NN
check ("ID_SECTIE" IS NOT NULL);
alter table SECTII
add constraint NUME_SECTIE_UN
unique ("NUME_SECTIE" );

2. MEDICI

4
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

create table MEDICI


(
ID_MEDIC NUMBER(5),
NUME VARCHAR2(25),
PRENUME VARCHAR2(25),
DATA_NSTERII DATE,
SPECIALIZARE VARCHAR2(25),
ID_SECTIE NUMBER(5)
);

alter table MEDICI


add constraint ID_MEDIC_PK primary key (ID_MEDIC);
alter table MEDICI
add constraint ID_MEDIC_NN
check ("ID_MEDIC" IS NOT NULL);
alter table MEDICI
add constraint ID_SECTIE_FK foreign key (ID_SECTIE)
references SECTII (ID_SECTIE);

3. PACIENTI

create table PACIENTI


(
ID_PACIENT NUMBER(5),
NUME_PACIENT VARCHAR2(25),

5
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
PRENUME_PACIENT VARCHAR2(25),
ADRESA VARCHAR2(25)
);

alter table PACIENTI


add constraint ID_PACIENT_PK primary key (ID_PACIENT);
alter table PACIENTI
add constraint ID_PACIENT_NN
check ("ID_PACIENT" IS NOT NULL);

4. FISE_MEDICI

create table FISE_MEDICI


(
ID_FISA NUMBER(5),
DATA_INTERNARII DATE,
DATA_EXTERNARII DATE,
ID_MEDIC NUMBER(5),
ID_PACIENT NUMBER(5)
);
alter table FISE_MEDICI
add constraint ID_FISA_PK primary key (ID_FISA);
alter table FISE_MEDICI
add constraint ID_MEDIC_FK foreign key (ID_MEDIC)
references MEDICI (ID_MEDIC);
alter table FISE_MEDICI
add constraint ID_PACIENT_FK foreign key (ID_PACIENT)
references PACIENTI (ID_PACIENT);

5. INVESTIGATII

6
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

create table INVESTIGATII


(
ID_INVESTIGATIE NUMBER(5),
REZULTAT VARCHAR2(25),
ID_FISA NUMBER(5)
);
alter table INVESTIGATII
add constraint ID_INVESTIGATIE_PK primary key (ID_INVESTIGATIE);
alter table INVESTIGATII
add constraint ID_FISA_FK foreign key (ID_FISA)
references FISE_MEDICI (ID_FISA);

6. MEDICAMENTE

create table MEDICAMENTE


(
ID_MEDICAMENT NUMBER(5),
DENUMIRE VARCHAR2(25),
PROSPECT VARCHAR2(25)
);

alter table MEDICAMENTE


add constraint ID_MEDICAMENT_PK primary key (ID_MEDICAMENT);

7. TRATAMENT

7
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
create table TRATAMENTE
(
ID_TRATAMENT NUMBER(5),
DOZA VARCHAR2(25),
ID_INVESTIGATIE NUMBER(5),
ID_MEDICAMENT NUMBER(5)
);
alter table TRATAMENTE
add constraint ID_TRATAMENT_PK primary key (ID_TRATAMENT);
alter table TRATAMENTE
add constraint ID_INVESTIGATIE_FK foreign key (ID_INVESTIGATIE)
references INVESTIGATII (ID_INVESTIGATIE);
alter table TRATAMENTE
add constraint ID_MEDICAMENT_FK foreign key (ID_MEDICAMENT)
references MEDICAMENTE (ID_MEDICAMENT);

IV. ADAUGAREA INREGISTRARILOR

INSERT INTO SECTII VALUES(1,'Pediatrie');


INSERT INTO SECTII VALUES(2,'Chirurgie');
INSERT INTO SECTII VALUES(3,'Dermatologie');
INSERT INTO SECTII VALUES(4,'Oftalmologie');
INSERT INTO SECTII VALUES(5,'Stomatologie');
INSERT INTO SECTII VALUES(6,'Ginecologie');
INSERT INTO SECTII VALUES(7,'Psihiatrie');
INSERT INTO SECTII VALUES(8,'Ortopedie');
INSERT INTO SECTII VALUES(9,'Boli infectioase');
INSERT INTO SECTII VALUES(10,'Sectie speciala');

8
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)


VALUES (95, 'Halep','Adriana','33654,Suceava');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (96, 'Manea','Teodor','521468,Tulcea');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (97, 'Gutui','Florica','125664,Alexandria');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (98, 'Chitu','Andrei','665522,Valea Cascadelor');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (99, 'Zamfir','Ioana','954425,Focsani');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (100,'Tasbac','Maria','965235, Sos.Pipera');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (101,'Costea','Flavius','785126, Galati');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (102,'Tapu','Florina','365897, Rucar');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES (103, 'Mitu','Madalina','111A,Iuliu Maniu');
INSERT INTO PACIENTI(ID_PACIENT,NUME_PACIENT,PRENUME_PACIENT,ADRESA)
VALUES(104,'Duta','Catalin','3022, Bd. Constructorilor');

9
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

INSERT INTO MEDICI VALUES (300,'Albulescu','Ion',to_date('17-06-1987','DD-MM-


YYYY'),'Medic Chirurg-Estetic',2);
INSERT INTO MEDICI VALUES (301,'Nedelcu','Lucian',to_date('23-04-1968','DD-
MM-YYYY'),'Medic Pediatru',1);
INSERT INTO MEDICI VALUES (302,'Ciobanu','Rares',to_date('01-03-1970','DD-MM-
YYYY'),'Medic Neurochirurg',2);
INSERT INTO MEDICI VALUES (303,'Enache','Simona',to_date('19-12-1982','DD-
MM-YYYY'),'Medic Oftalmolog ',4);
INSERT INTO MEDICI VALUES (304,'Boja','Violeta',to_date('10-10-1971','DD-MM-
YYYY'),'Medic Chirurg-cardiac',2);
INSERT INTO MEDICI VALUES (305,'Bajenaru','Razvan',to_date('05-09-1969','DD-
MM-YYYY'),'Medic Ginecolog',6);
INSERT INTO MEDICI VALUES (306,'Dedu','Leonora',to_date('10-08-1972','DD-MM-
YYYY'),'Psiholog/Psihiatru',7);
INSERT INTO MEDICI VALUES (307,'Bizdideanu','Claudiu',to_date('12-07-
1965','DD-MM-YYYY'),'Medic Specialist',9);
INSERT INTO MEDICI VALUES (308,'Vladau','Medeea',to_date('01-10-1978','DD-
MM-YYYY'),'Medic Dermatolog ',3);
INSERT INTO MEDICI VALUES (309,'Nedelea','Vasile',to_date('10-10-1973','DD-
MM-YYYY'),'Medic Ortoped',8);

10
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

INSERT INTO FISE_MEDICI VALUES (365,to_date('07-10-2015','DD-MM-


YYYY'),to_date('10-10-2015','DD-MM-YYYY'),300,101);
INSERT INTO FISE_MEDICI VALUES (502,to_date('23-07-2015','DD-MM-
YYYY'),to_date('10-08-2015','DD-MM-YYYY'),304,100);
INSERT INTO FISE_MEDICI VALUES (715,to_date('05-11-2015','DD-MM-
YYYY'),to_date('13-11-2015','DD-MM-YYYY'),302,104);
INSERT INTO FISE_MEDICI VALUES (847,to_date('12-12-2015','DD-MM-
YYYY'),to_date('13-12-2015','DD-MM-YYYY'),303,103);
INSERT INTO FISE_MEDICI VALUES (906,to_date('15-10-2015','DD-MM-
YYYY'),to_date('25-10-2015','DD-MM-YYYY'),302,102);
INSERT INTO FISE_MEDICI VALUES (1005,to_date('18-11-2015','DD-MM-
YYYY'),to_date('25-11-2015','DD-MM-YYYY'),301,99);
INSERT INTO FISE_MEDICI VALUES (1163,to_date('08-08-2015','DD-MM-
YYYY'),to_date('12-08-2015','DD-MM-YYYY'),308,96);
INSERT INTO FISE_MEDICI VALUES (1255,to_date('10-11-2015','DD-MM-
YYYY'),to_date('13-11-2015','DD-MM-YYYY'),309,98);
INSERT INTO FISE_MEDICI VALUES (1459,to_date('15-08-2015','DD-MM-
YYYY'),to_date('15-09-2015','DD-MM-YYYY'),306,97);
INSERT INTO FISE_MEDICI VALUES (1500,to_date('15-10-2015','DD-MM-
YYYY'),to_date('16-10-2015','DD-MM-YYYY'),303,95);

11
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

INSERT INTO INVESTIGATII VALUES(10035,'Obezitate faza II',365);


INSERT INTO INVESTIGATII VALUES(10257,'Tahicardie',502);
INSERT INTO INVESTIGATII VALUES(11023,'Parkinson',715);
INSERT INTO INVESTIGATII VALUES(11236,'Miopie in faza avansata',847);
INSERT INTO INVESTIGATII VALUES(11569,'Tumoare cerebrala',906);
INSERT INTO INVESTIGATII VALUES(12100,'Pneumonie Lobara',1005);
INSERT INTO INVESTIGATII VALUES(12568,'Acnee Severa',1163);
INSERT INTO INVESTIGATII VALUES(12957,'Osteogeneza',1255);
INSERT INTO INVESTIGATII VALUES(13696,'Stres',1459);
INSERT INTO INVESTIGATII VALUES(13564,'Inflamarea irisului',1500);

INSERT INTO MEDICAMENTE VALUES (49,'Algocalmin','3/zi');


INSERT INTO MEDICAMENTE VALUES (48,'Supramax gel','dimineata si seara');
INSERT INTO MEDICAMENTE VALUES (47,'Extraveral','1capsula/18h');
INSERT INTO MEDICAMENTE VALUES (46,'Zinerit','3 aplicari/zi');
INSERT INTO MEDICAMENTE VALUES (50,'Dehydrobenzperidol','3/zi');
INSERT INTO MEDICAMENTE VALUES (51,'Ketonal','anti-inflamator,la durere');
INSERT INTO MEDICAMENTE VALUES (52,'Achetaminophen','2/zi,dupa mese');

12
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
INSERT INTO MEDICAMENTE VALUES (53,'Moldamin','1 injectabila/12h');
INSERT INTO MEDICAMENTE VALUES (54,'Ocunet','3 picaturi/zi');
INSERT INTO MEDICAMENTE VALUES (55,'Entamoeba','1 capsula/6h');

INSERT INTO TRATAMENTE VALUES (200,'2 cutii',10035,51);


INSERT INTO TRATAMENTE VALUES (201,'1 cutie',10257,55);
INSERT INTO TRATEMENTE VALUES (202,'3 tablete',11023,50);
INSERT INTO TRATAMENTE VALUES (203,'1 tub',11236,54);
INSERT INTO TRATAMENTE VALUES (204,'5 fiole',11569,53);
INSERT INTO TRATAMENTE VALUES (205,'2 cutii',12100,53);
INSERT INTO TRATAMENTE VALUES (206,'1 cutie',12568,46);
INSERT INTO TRATEMENTE VALUES (207,'3 tablete',12957,48);
INSERT INTO TRATAMENTE VALUES (208,'1 tub',13696,49);
INSERT INTO TRATAMENTE VALUES (209,'5 fiole',13564,54);

V. ACTUALIZAREA INREGISTRARILOR
-INSERT,UPDATE,DELETE-

UPDATE PACIENTI
SET NUME_PACIENT='Braga'
WHERE ID_PACIENT=101;

UPDATE MEDICI
SET SPECIALIZARE='Expert'

13
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
WHERE EXTRACT(YEAR FROM DATA_NSTERII)<1970;

DELETE FROM MEDICAMENTE


WHERE ID_MEDICAMENT=50;

UPDATE INVESTIGATII
SET REZULTAT='CAZ URGENT-CONTAGIOS'
WHERE ID_INVESTIGATIE=11023;

INSERT INTO SECTII VALUES (11,'DEZINTOXICARE');

14
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

VI. STERGEREA SI RECUPERAREA UNEI TABELE


Stergerea tabelei, inclusiv constrangerile.
DROP TABLE SECTII CASCADE CONSTRAINTS;

Recuperam tabela stearsa.


FLASHBACK TABLE SECTII TO BEFORE DROP;

Verificam daca tabela s-a recuperat.


SELECT * FROM SECTII;

VII. EXEMPLE DE INTEROGARI


1. Afisati pentru fiecare pacient, numarul zilelor de spitalizare si
medicul care l-a tratat.
select nume_pacient, prenume_pacient, (data_externarii-data_internarii)
Zile_spitalizare, nume||' '||prenume Medic

15
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
from medici m, pacienti p, fise_medici f
where m.id_medic=f.id_medic and p.id_pacient=f.id_pacient;

2. Afisati pentru fiecare medic, numele, prenumele si varsta acestuia.

select nume,prenume, trunc((sysdate-data_nsterii)/365,0) Varsta_medic


from medici;

3. Creati o clasificare a medicilor in functie de varsta acestora, astfel incat


cei sunt 30 de ani sa fie catalogati neexperimentati, cei intre 30-45 sa
fie buni, iar cei peste 45 experimentati.

select nume, prenume,trunc((sysdate-data_nsterii)/365,0) Varsta,


case
when trunc((sysdate-data_nsterii)/365,0)<30 then 'Medic neexperimentat'
when trunc((sysdate-data_nsterii)/365,0)<45 then 'Medic bun'
else 'Medic expert'
end Clasificarea_medicilor
from medici
order by Varsta asc;

16
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

4. Afisati pentru pacientul cu numele Braga, rezultatul investigatiei,


medicamentele prescrise, alaturi de prospect si doza recomandata.

select nume_pacient, prenume_pacient, rezultat, doza, denumire, prospect


from pacienti p,fise_medici f, investigatii i, tratamente t, medicamente m
where nume_pacient='Braga' and p.id_pacient=f.id_pacient and
f.id_fisa=i.id_fisa and i.id_investigatie=t.id_investigatie and
m.id_medicament=t.id_medicament;

5. Afisati pentru fiecare medic, numarul pacientilor pe care i-a consultat.


select m.id_medic,m.nume,count(f.id_pacient) Numar_pacienti
from fise_medici f, medici m
where m.id_medic=f.id_medic
group by m.id_medic,m.nume;

6. Afisati sectiile cu numar maxim de medici. (subcerere)

17
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
select s.id_sectie, s.nume_sectie
from medici m, sectii s
where m.id_sectie=s.id_sectie
group by s.id_sectie,s.nume_sectie
having count(*)=(select max(count(*))
from medici group by id_sectie)

7. Afisati medicii nascuti in luna octombrie.


select nume||' '||prenume Medic
from medici
where extract(month from data_nsterii)=10;

8. Afisati medicamentele ce contin in denumire vocalele e si o.


select *
from medicamente
where lower(denumire) like '%e%o%';

9. Creati o clasificare a pacientilor in functie de numarul de zile in care


acesta a stat in spital. Daca numarul este mai mic de 5, atunci pacientul
nu prezinta o boala severa si il numim Pacient in stare buna, intre 5-10
zile Pacient in stare medie iar peste 10 Pacient in stare grava.
Ordonati crescator pacientii in functie de numarul zilelor de spitalizare.

select nume_pacient||' '||prenume_pacient Pacient,data_externarii-


data_internarii Zile_spitalizare,
case
when (data_externarii-data_internarii)<5 then 'Pacient in stare buna'
when (data_externarii-data_internarii) between 5 and 10 then 'Pacient in
stare medie'
else 'Pacient in stare grava'
end Clasificarea_pacientilor
from pacienti p, fise_medici f
where f.id_pacient=p.id_pacient
order by Zile_spitalizare asc;

18
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

10. Afisati doctorii ce sunt nascuti in luni ce au 31 de zile.


select nume,prenume
from medici
where extract(day from last_day(data_nsterii))=31

11. Afisati pentru fiecare sectie,numarul de medici, inclusive sa afisam


sectii cu niciun medic aflat momentan in spital.
select s.id_sectie, count(m.id_medic) Numar_medici
from medici m, sectii s
where m.id_sectie(+)=s.id_sectie
group by s.id_sectie
order by Numar_medici asc;

19
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

12. Sa se afiseze medicii, care sunt nascuti inainte de o data specificata,


respectiv 1 ianuarie 1975.
select *
from medici
where data_nsterii<to_date('01/01/1975','DD/MM/YYYY');

13. Sa se afiseze medicamentele cu o denumire foarte lunga, mai mare de


10, iar lungimea prospectului mai mare de 8.

select *
from medicamente
where length(DENUMIRE)>10 and length(PROSPECT)>8;

14. Pentru fiecare pacient, afisati rezultatul investigatiei pe scurt ( 6


caractere)

select nume_pacient||' '||prenume_pacient Pacient, substr(rezultat,1,6)


Rezultat_pe_scurt
from investigatii i, fise_medici f, pacienti p
where p.id_pacient=f.id_pacient and f.id_fisa=i.id_fisa;

20
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

15. Sa se afiseze data cand a parasite spitalul, dar si id fisei sale, pacientul
ce locuieste pe bulevardul Iuliu Maniu. (subcerere)

select id_fisa,data_externarii
from fise_medici
where id_pacient=(select id_pacient from pacienti where adresa like
'%Iuliu Maniu%');

16. Pentru pacientii in stare grava, care au stat un numar mare de zile
spitalizati, aplicati o reducere la plata taxelor in acest fel: cel mai grav
pacient va primi o reducere de 0.5, si in continuare urmatorul pacient
va primi o reducere cu 0.1 mai putin fata de anterorul. Rezolvarea se va
face cu expresia DECODE.

SELECT nume_pacient||' '||prenume_pacient Pacient,data_externarii-


data_internarii Zile_spitalizare, DECODE((data_externarii-
data_internarii),31,0.5,18,0.4,10,0.3,8,0.2,7,0.1,0) Reducere
from pacienti p, fise_medici f
where f.id_pacient=p.id_pacient
order by zile_spitalizare asc;

21
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

17. Sa se afiseze numele sectiilor care au id-ul intre 1 si 8 fara cei care au
id-ul 5 si 6.

SELECT nume_sectie FROM sectii WHERE id_sectie BETWEEN 1 AND 8


MINUS
SELECT nume_sectie FROM sectii WHERE id_sectie IN (5, 6);

18. Sa se afiseze medicii care au varsta intre 30-40 de ani si de asemenea


cei care au varsta 45,46,47 folosindu-se operatorul UNION.

select nume,prenume, trunc((sysdate-data_nsterii)/365,0) Varsta_medic


from medici
WHERE trunc((sysdate-data_nsterii)/365,0) BETWEEN 30 AND 40
Union
select nume,prenume, trunc((sysdate-data_nsterii)/365,0) Varsta_medic
from medici
WHERE trunc((sysdate-data_nsterii)/365,0) IN(45,46,47);

22
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

19. Sa se afiseze medicii care au id-ul la intersectia celor din 300-307 si


305-309
SELECT nume,prenume FROM medici WHERE id_medic BETWEEN 300
AND 307
INTERSECT
SELECT nume,prenume FROM medici WHERE id_medic BETWEEN 305
AND 309;

20. Sa se afiseze sectiile care nu au medici inca, dar si sectiile care au 3


medici unde isi desfasoara activitatea.

select s.id_sectie, count(m.id_medic) Numar_medici


from medici m, sectii s
where m.id_sectie(+)=s.id_sectie
group by s.id_sectie
having count(m.id_medic)=0
UNION
select s.id_sectie, count(m.id_medic) Numar_medici
from medici m, sectii s
where m.id_sectie(+)=s.id_sectie
group by s.id_sectie
having count(m.id_medic)=3;

VIII. ALTE OBIECTE ALE BAZEI DE DATE

I. Tabele vituale - stocheaza interogri si permit reutilizarea


acestora, protejeaza informaiile de natura confidentiala, protejeaza BD la
actualizare, materializate stocheaza si inregistrarile

Sa se realizeze o tabela virtuala cu fiecare medic si fisa realizata.

23
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

CREATE or replace view w2 as


select nume, id_fisa
from medici e, fise_medici f
where e.id_medic=f.id_medic ;

Sa se realizeze o tabela virtala cu fiecare pacient si numarul de zile de


spitalizare.

create or replace view w3 as


select nume_pacient,data_externarii-data_internarii Zile_spitalizare

24
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
from fise_medici f, pacienti p
where p.id_pacient=f.id_pacient;

II. Indecsi- Permit accesul rapid la date prin sortarea logica a nregistrrilor si
creaz automat la introducerea unei restricii de cheie primar sau de unicitate
sau manual de ctre utilizator.

1 Sa se creeze un index pe tabela medici pe coloana prenume:

select * from medici


where prenume='Violeta';

Create index index_medici


on medici(prenume);
select * from medici
where prenume='Violeta';

25
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

reducerea costului!!!

2 Sa se creeze un index pe tabela sectii pe coloana nume_sectie:

select * from sectii


where NUME_SECTIE='Chirurgie';

Create index index_sectii


on sectii(nume_sectie);

reducerea costului!!!

3 Sa se stearga indexul creat anterior:

DROP INDEX index_sectii;

III. Secvente - sunt utilizate pentru asigurarea unicitatii cheilor primare


sau a valorilor pentru care s-a impus o restrictie de tip UNIQUE, pot fi
utilizate pentru mai multe tabele, pentru fiecare secventa se va preciza
valoarea de inceput, pasul de incrementare si valoarea maxima generata.

1. Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela


Medicamente.

CREATE SEQUENCE seq_medicamente


start with 10 increment by 2
maxvalue 50 nocycle;

26
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033

Insert into medicamente values


(seq_medicamente.NEXTVAL,'Algozone','3/zi');

SELECT * FROM MEDICAMENTE;

(dupa 2 inserari)

2. Sa se afiseze valoarea curenta a secventei:


SELECT seq_medicamente.CURRVAL FROM DUAL;

3. S se stearg secvena seq_nrcomanda:


DROP SEQUENCE seq_nrcomanda;

4. Sa se creeze o secventa pentru asigurarea unicitatii cheii primare din tabela


Pacienti.

27
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
CREATE SEQUENCE seq_pacienti
start with 105 increment by 5
maxvalue 1000 nocycle;

Insert into pacienti values


(seq_pacienti.NEXTVAL,'Smeureanu','Ion','235124,Calea Dorobanti');

(1 insert)
IV. Sinonimele - Sunt nume alternative utilizate pentru referirea
obiectelor unei baze de date, pot fi sinonime publice (accesibile tuturor
utilizatorilor) sau private, sinonimele publice pot fi create numai de
administratorul bazei de date.
Sa se creeze un sinonim pentru tabela Sectii:
CREATE SYNONYM sc FOR SECTII;

Sa se stearga sinonimul creat anterior:

28
Informatic-Economic
Brag Ionela-Cristiana
Seria A - Grupa 1033
DROP SYNONYM sc;

Sa se creeze un sinonim pentru tabela Medici:


CREATE SYNONYM md FOR MEDICI;

Sa se stearga sinonimul creat anterior:


DROP SYNONYM md;

29