Sunteți pe pagina 1din 13

BAZA DE DATE A UNUI SPITAL

CLASE UTILIZATE

SECTII
MEDICAMENT
DATE_NASTERE
ADRESA
PERSOANA
ANGAJAT
PACIENT
INTERNAT
TRATAMENT

TABELE UTILIZATE

SECTII
ANGAJATI
PACIENTI
INTERNATI
TRATAMENT

DEFINIREA CLASEI SECTII


CREATE OR REPLACE TYPE sectii AS OBJECT(
NR NUMBER,
DENUMIRE VARCHAR2(30),
MEMBER FUNCTION get_denumire RETURN VARCHAR2
); /
DEFINIRE METODA: get_denumire
CREATE OR REPLACE TYPE BODY sectii AS
MEMBER FUNCTION get_denumire RETURN VARCHAR2 IS
BEGIN
RETURN DENUMIRE;
END get_denumire;

END; /

DEFINIREA CLASEI MEDICAMENT


CREATE OR REPLACE TYPE MEDICAMENT AS OBJECT(
NUME VARCHAR(40),
DOZA NUMBER,
INTERVAL_ORAR NUMBER,
OBSERVATII VARCHAR(50)
);/

DEFINIREA CLASEI DATE_NASTERE


CREATE OR REPLACE TYPE date_nastere AS OBJECT(
LOC VARCHAR2(30),
NUMETATA VARCHAR2(30),
NUMEMAMA VARCHAR2(30),
DATANASTERE DATE,
MEMBER FUNCTION get_varsta RETURN NUMBER
); /
DEFINIRE METODA: get_varsta
CREATE OR REPLACE TYPE BODY date_nastere AS
MEMBER FUNCTION get_varsta RETURN NUMBER IS
ancurent NUMBER;
annastere NUMBER;
rezultat NUMBER;
BEGIN
select EXTRACT(YEAR FROM DATANASTERE) into annastere from dual;
select extract(year from sysdate) into ancurent from dual;
rezultat:=ancurent-annastere;
return rezultat;
END get_varsta;
end; /

DEFINIREA CLASEI ADRESA


CREATE OR REPLACE TYPE adresa AS OBJECT (
oras VARCHAR2(30),
comuna VARCHAR2(30),
strada VARCHAR2(30),
judet VARCHAR2(30)
); /

DEFINIREA CLASEI PERSOANA


CREATE OR REPLACE TYPE persoana AS OBJECT(
nume VARCHAR2(30),
prenume VARCHAR2(30),
cnp NUMBER(13)
) NOT FINAL; /

DEFINIREA CLASEI ANGAJAT


CREATE OR REPLACE TYPE angajat UNDER persoana (
vechime NUMBER,
salariu NUMBER,
sectie NUMBER
);

DEFINIREA CLASEI PACIENT


CREATE OR REPLACE TYPE pacient UNDER persoana (
id NUMBER,
asigurat VARCHAR2(3)
);
/

DEFINIREA CLASEI INTERNAT


CREATE OR REPLACE TYPE INTERNAT AS OBJECT(
ID NUMBER,

CNP NUMBER(13),
SECTIE NUMBER,
INTERNARE DATE,
EXTERNARE DATE,
MEMBER FUNCTION nr_zile_spitalizare RETURN NUMBER
);/
DEFINIRE METODA: nr_zile_spitalizare
CREATE OR REPLACE TYPE BODY INTERNAT AS
MEMBER FUNCTION nr_zile_spitalizare RETURN NUMBER IS
rezultat NUMBER:=0;
BEGIN
if(EXTERNARE is null) then
select to_date(SYSDATE,'mm/dd/yyyy') to_date(INTERNARE,'mm/dd/yyyy') into rezultat
from dual;
else
select to_date(EXTERNARE,'mm/dd/yyyy') to_date(INTERNARE,'mm/dd/yyyy') into rezultat
from dual;
end if;
RETURN rezultat;
END nr_zile_spitalizare;
END; /

DEFINIREA CLASEI TRATAMENT


CREATE OR REPLACE TYPE TRATAMENT AS OBJECT(
ID NUMBER,
CNP NUMBER(13),
SECTIE NUMBER,
DATA_PRESCRIERE DATE,
MED MEDICAMENT

);/

DEFINIREA TABELEI SECTII_SPITAL


CREATE TABLE sectii_spital OF sectii(
NR PRIMARY KEY NOT NULL,
DENUMIRE NOT NULL
);
INSERARE DATE
INSERT INTO sectii_spital values(
sectii(1,'Medicina Interna I')
);
INSERT INTO sectii_spital values(
sectii(2,'MEDICINA INTERNA II')
);
INSERT INTO sectii_spital values(
sectii(3,'CARDIOLOGIE')
);
INSERT INTO sectii_spital values(
sectii(4,'NEUROLOGIE')
);
INSERT INTO sectii_spital values(
sectii(5,'PSIHIATRIE I')
);

DEFINIREA TABELEI ANGAJATI


CREATE TABLE angajati (
ang angajat,
nastere date_nastere,
adr adresa,
CONSTRAINT pk1 PRIMARY KEY (ang.cnp)
);/
alter table angajati add constraint fk_2
foreign key (ang.sectie) references sectii_spital(nr);
INSERARE DATE
INSERT INTO angajati VALUES(
ANGAJAT('CAZACU','ALINA','2930120181099','2','2200','1'),
DATE_NASTERE('CARBUNESTI','ILIE','CLAUDIA','01/20/1993'),
ADRESA('CRAIOVA','CRAIOVA','LIBERTATII','DOLJ')
);/
INSERT INTO angajati VALUES(
ANGAJAT('CAZACU','IONUT','1930120181099','2','2200','2'),
DATE_NASTERE('CARBUNESTI','ILIE','CLAUDIA','01/20/1992'),
ADRESA('CRAIOVA','CRAIOVA','LIBERTATII','DOLJ')
);/
INSERT INTO angajati VALUES(
ANGAJAT('PREDA','IONUT','1810120181099','6','22000','3'),
DATE_NASTERE('CARBUNESTI','ILIE','CLAUDIA','01/20/1981'),
ADRESA('TIMISOARA','TIMISOARA','LIBERTATII','TIMIS')
);/

DEFINIREA TABELEI PACIENTI


CREATE TABLE pacienti(
pacie pacient,
nastere date_nastere,

adr adresa,
CONSTRAINT pk_pacient2 PRIMARY KEY (pacie.cnp)
);
INSERARE DATE
insert into pacienti VALUES(
PACIENT('STANA','MADALINA','2920120189910','1','DA'),
DATE_NASTERE('BALS','ION','MARIA','04/05/1992'),
ADRESA('BALS','BALS','CHILIEI','OLT')
);/
insert into pacienti VALUES(
PACIENT('MUTULESCU','ION','1710120189910','1','DA'),
DATE_NASTERE('CRAIOVA','GHEORGHE','LAURA','04/05/1971'),
ADRESA('BALS','BALS','CHILIEI','OLT')
);/
insert into pacienti VALUES(
PACIENT('MUTULESCU','IOANA','2630120189910','1','NU'),
DATE_NASTERE('CRAIOVA','GHEORGHE','LAURA','04/05/1963'),
ADRESA('BALS','BALS','CHILIEI','OLT')
);/
insert into pacienti VALUES(
PACIENT('SPATARU','LARISA','2810120189910','1','NU'),
DATE_NASTERE('CRAIOVA','GHEORGHE','LAURA','04/05/1981'),
ADRESA('BALS','BALS','CHILIEI','OLT')
);/

DEFINIREA TABELEI INTERNATI


CREATE TABLE internati of INTERNAT(
ID PRIMARY KEY NOT NULL,
CNP NOT NULL,
SECTIE NOT NULL,
INTERNARE NOT NULL
);

alter table internati add constraint fk_internati1


foreign key (cnp) references pacienti(pacie.cnp);
alter table internati add constraint fk_internati1
foreign key (sectie) references sectii_spital(nr);
INTRODUCERE DATE
INSERT INTO internati values ('1','2920120189910','1','11/11/2014','12/12/2014');/
INSERT INTO internati values ('2','2920120189910','1','9/11/2014','9/22/2014');/
INSERT INTO internati values ('3','1710120189910','1','9/11/2014','9/12/2014');/
INSERT INTO internati ( id, cnp, sectie, internare) values
('4','2630120189910','3','9/11/2014');/
INSERT INTO internati ( id, cnp, sectie, internare) values
('5','2810120189910','4','12/1/2014');/

DEFINIREA TABELEI TRATAMENT


CREATE TABLE tratamente OF TRATAMENT(
id primary key not null,
cnp not null,
sectie not null,
data_prescriere not null
);
alter table tratamente add constraint fk_tratament1
foreign key (sectie) references sectii_spital(nr);
alter table tratamente add constraint fk_tratament2
foreign key (cnp) references pacienti(pacie.cnp);
INSERARE DATE
insert into tratamente values (
'1','2920120189910','1','11/11/2014',
medicament('paracetamol','500','4','nu se consuma alcool')
);
insert into tratamente values (
'2','2920120189910','1','11/11/2014',
medicament('glucoza','500','4','nu se consuma alcool')
);

insert into tratamente values (


'3','2630120189910','3','11/11/2014',
medicament('glucoza','500','4','nu se consuma alcool')
);
insert into tratamente values (
'4','2630120189910','3','11/11/2014',
medicament('c-fort','500','4','nu se consuma alcool')
);
insert into tratamente values (
'5','2630120189910','4','12/1/2014',
medicament('c-fort','500','4','nu se consuma alcool')
);
insert into tratamente values (
'5','2630120189910','4','12/1/2014',
medicament('vitamina B','500','4','nu se consuma alcool')
);

INTEROGARI
Afisare sectii spital
select * from sectii_spital
Schimbare denumire pentru
sectia cu nr 1
UPDATE sectii_spital SET
DENUMIRE='MEDICINA
INTERNA I'
where sectii_spital.NR=1;
Afisare denumiri sectii
select p.get_denumire() as denumiri_sectii from sectii_spital p

Afisare date despre angajati


select p.ang.nume as nume,
p.ang.prenume as prenume,

p.ang.cnp as cnp,
p.ang.sectie as sectie, p.ang.vechime as vechime, p.ang.salariu as salariu,
p.nastere.loc as loc_nastere, p.nastere.numetata as tata, p.nastere.numemama as mama,
p.nastere.datanastere as data_nastere, p.adr.oras as oras,p.adr.comuna as comuna,
p.adr.strada as strada, p.adr.judet as judet
from angajati p

Afisare nume, prenume si varsta angajat


select p.ang.nume as nume, p.ang.prenume as prenume, p.nastere.get_varsta() as varsta
from angajati p

Afisare date despre


pacienti
select p.pacie.id as id, p.pacie.nume as nume , p.pacie.prenume as prenume,
p.pacie.cnp as cnp, p.pacie.asigurat as asigurat,
p.nastere.loc as loc_nastere, p.nastere.numetata as tata,
p.nastere.numemama as mama, p.nastere.datanastere as data_nastere,
p.adr.oras as oras, p.adr.comuna as comuna, p.adr.strada as strada,
p.adr.judet as judet
from pacienti p

Afisare internari
select * from internati

Schimbare data externare pentru '2920120189910'


UPDATE internati SET externare='12/04/2014', internare='12/02/2014', sectie='1'
where cnp='2920120189910' and id=1;
UPDATE internati SET externare='12/04/2014', internare='12/01/2014', sectie='3'
where cnp='2920120189910' and id=2;
select * from internati

Afisare nume
pacient si
denumirea sectiei
select p.pacie.nume as nume_pacient, p.pacie.prenume as prenume_pacient, s.denumire
as denumire_sectie
from pacienti p, sectii_spital s, internati i
where i.sectie=s.nr and p.pacie.cnp=i.cnp;

Afisare
medicamente si
denumirea sectie
de unde a fost
prescrise pentru
pacientul STANA MADALINA
select p.pacie.nume, p.pacie.prenume, s.denumire, t.med.nume, t.med.doza
from sectii_spital s, pacienti p, tratamente t
where s.nr=t.sectie and t.cnp=p.pacie.cnp and p.pacie.nume='STANA' and
p.pacie.prenume='MADALINA';

Afisarea nr. de zile de spitalizare pentru fiecare pacient

select p.pacie.nume as nume, p.pacie.prenume as prenume , i.sectie, i.nr_zile_spitalizare()


as nr_zile
from internati i, pacienti p
where p.pacie.cnp=i.cnp

Afisarea nr de zile de
spitalizare pentru
pacientii care nu au
asigurare
select p.pacie.nume as nume, p.pacie.prenume as prenume , i.sectie, i.nr_zile_spitalizare()
as nr_zile
from internati i, pacienti p
where p.pacie.cnp=i.cnp and p.pacie.asigurat='NU';

Afisare varsta pacienti


care au asigurare
select p.pacie.nume, p.pacie.prenume, p.nastere.get_varsta()
from pacienti p
where p.pacie.asigurat='DA';

Stergerea
inregistrarilor din tabela tratamente pentru pacientii care au fost externati
delete from tratamente t
where t.cnp in (select i.cnp from internati i where i.externare is not null)
and t.sectie in (select i.sectie from internati i where i.externare is not null)
Stergere tratament pentru pacientul MUTULESCU IONANA, sectia 3
delete from tratamente t
where t.cnp in (select i.cnp from internati i, pacienti p
where i.cnp=p.pacie.cnp and p.pacie.nume='MUTULESCU'
and p.pacie.prenume='IOANA')

and t.sectie='3';

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