Sunteți pe pagina 1din 11

1.

Descrierea bazei de date




Baza de date este format din patru tabele cu legturi ntre ele, pentru a asigura o
implementare ct mai accesibil i mai potrivit a gestiunii operelor vndute ntr-o galerie de
art.

Cele patru tabele conin date despre expoziii, clieni, opere i artiti, astfel:

- EXPOZIIE: codul expoziiei, numele expoziiei, data deschiderii, data nchiderii,
adresa acesteia;
- ARTITI: CNP artist, nume artist, adres, telefon, e-mail;
- CLIENI: CNP client, nume client, adres, telefon, e-mail;
- OPERE: codul operei, expoziia din care face parte, artistul care a realizat-o , clientul
care a cumprat-o, preul, data vnzrii.

Legturile ntre tabele se fac prin intermediul tabelei OPERE, o oper avnd ca atribute
(cheie strin compus) cnp-ul artistului, cnp-ul autorului i codul expoziiei.





2. Schema Conceptuala

Clienti

Cnp_client Nume Adresa Telefon E-mail

Opere


Cod_opera
Denumire Pret Cod_expo Cnp_artist Data_vanzarii



Artisti

Telefon Nume Adresa Cnp_artist Email


Expozitii

Adresa Nume Data_deschiderii Data_inchiderii Cod_expo



create table clienti(cnp_client number(13) primary key,
nume varchar2(40),adresa varchar2(50),telefon number(15),email varchar2(50));

create table expozitii(cod_expo varchar2(20) primary key,nume varchar2(50),data_deschiderii date,
data_inchiderii date,adresa varchar2(50));

create table artisti(cnp_artist number(13) primary key, nume varchar2(50), adresa varchar2(50), telefon
number(15), email varchar2(50));

create table opere(cod_opera number(15) primary key, denumire varchar2(50), pret number(7),
cod_expo references expozitii(cod_expo), cnp_artist references artisti(cnp_artist), data_vanzarii date);






4. Adugarea de nregistri n tabele
Pentru tabela ARTITI:
insert into artisti values('2890423295890','Maria Ionescu','Bucuresti, Bd. Magheru, nr. 50', '0213456798',
'maria_ioenscu@artgallery.ro');
insert into artisti values('1780321678955', 'Ciobotea Andrei', 'Bucuresti, Bd. Regina Elisabeta, nr. 17',
'0213456889', 'ciobo.a@artgallery.ro');
insert into artisti values('2680312879445','Ionescu Paraschiva','Campina, Str. Alexandru Odobescu, nr. 23',
'0244336754',null);
insert into artisti values('1560321564665','Ghiteanu Petre','Ploiesti, Bd. Republicii, nr. 150', '0244556721',
null);
insert into artisti values('1600312543446','Vivian Dan','Braila, Str. Pacii, nr. 11', '0733453221',
'vividan@yahoo.com');
insert into artisti values('2680319445343','Irimia Luminita','Targu Jiu, Bd. Constantin Brancusi, nr. 12',
'0733451221', 'irimia-luminita@gmail.com');
insert into artisti values('1690423444534','Miclea Dragos','Filipestii de padure,Str. Centrala, nr. 45',
'0766781234', 'miclea_dragos@gmail.com');
insert into artisti values('1561123455456','Gurzun Lucian','Bucuresti, Bd. Crangasi, nr. 120', '0213467556',
'gurzunlucian@artgallery.ro');
insert into artisti values('2750904589032','Papusoiu Mariana','Cluj-Napoca, Bd. Maracinelui, nr. 76',
'0766543321', 'marianapapusoiu@yahoo.com');
insert into artisti values('1650323564454','Dan Cristian','Constanta, Str. Popa Tatu, nr. 554',
'0732675342', 'dan_cristian@yahoo.com');
Pentru tabela CLIENTI:

insert into clienti values('1890423345654','Puricelu Ciprian','Bucuresti, Bd. Magheru, nr.
540','0216756798',null);
insert into clienti values('2890327678955','Banu Loredana','Ploiesti, Bd. Republicii, nr.
172','0244765493','lory89@yahoo.com');
insert into clienti values('2870312879445','Ionescu Ioana','Campina, Str. Alexandru Odobescu, nr.
29','0745221123',iioana@yahoo.com);
insert into clienti values('1700321564665','Bucurei Petru','Breaza, Str. Mare, nr. 150',null,null);
insert into clienti values('1680312543446','Marinescu Dan','Braila, Str. Alexandru Ioan Cuza, nr.
134','0733953221','danmarinescu@yahoo.com');
insert into clienti values('2700319445343','Pioara Diana','Targu Mures, Bd. Constantin cel mare, nr.
132','0722451221','aylin65@gmail.com');
insert into clienti values('1790423444534','Bucur Marian','Galati ,Str. Toamnei, nr.
35','0765781234',null);
insert into clienti values('1901123455456','Badiceanu Lucian','Campina, Str. B.P. Hasdeu, nr.
10','0722467556','badiluci@gmail.ro');
insert into clienti values('27509045778032','Popescu Mihaela','Crivina, Bd. Maracinilor, nr.
796','0723543321',null);
insert into clienti values('1750323564454','Popovici Cristian','Bucuresti, Str. Ion Agarbiceanu , nr.
345','0733675342','cristianpopovici@yahoo.com');


Pentru tabela EXPOZITII:

insert into expozitii values('expo1','Naturi Statice', to_date('29/01/09 ',' dd/mm/yy'),to_date('25/02/09
',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');
insert into expozitii values('expo2','Flori', to_date('12/01/07 ',' dd/mm/yy'),to_date('25/02/07 ','
dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');
insert into expozitii values('expo3','Portretul modern', to_date('15/02/09 ','
dd/mm/yy'),to_date('15/04/09 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');
insert into expozitii values('expo4','Parodii si caricaturi', to_date('01/01/09 ','
dd/mm/yy'),to_date('01/07/09 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');
insert into expozitii values('expo5','Feminin', to_date('01/03/08 ',' dd/mm/yy'),to_date('01/04/08 ','
dd/mm/yy'),'Muzeul national de arta contemporana, Izvor, Bucuresti ');
insert into expozitii values('expo6','Inaripari', to_date('20/09/08 ',' dd/mm/yy'),to_date('25/11/08 ','
dd/mm/yy'), 'Muzeul national de arta contemporana, Izvor, Bucuresti ');
insert into expozitii values('expo7','Miresme de primavara', to_date('10/03/09 ',' dd/mm/yy'),
to_date('10/05/09 ',' dd/mm/yy'),'Galeria Veroniki Art, Intrarea Murmurului 2, Bucuresti ');
insert into expozitii values('expo8','Pastele la romani', to_date('14/03/07 ','
dd/mm/yy'),to_date('15/05/07 ',' dd/mm/yy'),'Sun Art Studio, Ioan Florescu 13, Bucuresti ');
insert into expozitii values('expo9','Relativitati', to_date('17/01/09 ',' dd/mm/yy'),to_date('25/08/09 ','
dd/mm/yy'), 'Muzeul national de arta contemporana, Izvor, Bucuresti ');
insert into expozitii values('expo10','Pitoresc in peisajele romanesti', to_date('20/07/08 ',' dd/mm/yy'),
to_date('27/10/08 ',' dd/mm/yy'), 'Galeria Veroniki Art, Intrarea Murmurului 2, Bucuresti ');
Pentru tabela OPERE:

insert into opere values ('1', 'Trandafiri',450,'expo1', '2890423295890', to_date ('23/02/09',
'dd/mm/yy'), '1790423444534');
insert into opere values ('123', 'Flori de camp',350,'expo1', '2890423295890', to_date ('23/02/09',
'dd/mm/yy'), '1790423444534');
insert into opere values ('2', 'Prietenii','500','expo3','2890423295890',to_date('15-03-2009','dd-mm-
rrrr'),'2700319445343');
insert into opere values('3', 'Valea Prahovei','1100','expo10',' 1650323564454',to_date('25-08-2009','dd-
mm-rrrr'),' 1750323564454');
insert into opere values('4', 'Ioana','650','expo3',' 2750904589032',to_date('03-04-2009','dd-mm-rrrr'),'
1750323564454');
insert into opere values('5', 'Timpul','1500','expo9',' 1561123455456',to_date('21-05-2009','dd-mm-
rrrr'),' 1890423345654');
insert into opere values('6', 'Intrinsec','1050','expo6',' 1690423444534',to_date('30-10-2008','dd-mm-
rrrr'),' 1890423345654');
insert into opere values('7', 'Presedintele','590','expo4',' 1780321678955',to_date('10-05-2009','dd-mm-
rrrr'),' 1901123455456');
insert into opere values('8', 'Apolitic','670','expo4',' 1560321564665',to_date('04-06-2009','dd-mm-
rrrr'),'2700319445343');
insert into opere values('9', 'Iarna pe malul marii','800','expo10',' 1650323564454',to_date('05-09-
2008','dd-mm-rrrr'),' 1680312543446');
insert into opere values('10', 'Pomi infloriti in Bucuresti','350','expo7',' 2680312879445',to_date('30-03-
2009','dd-mm-rrrr'),' 1901123455456');
insert into opere values('11', 'Invierea','700','expo8',' 2680312879445',to_date('12-04-2007','dd-mm-
rrrr'),' 1680312543446');
insert into opere values('12', 'El si ea','900','expo3',' 1560321564665',to_date('16-03-2009','dd-mm-
rrrr'),' 2890327678955');
insert into opere values('13', 'Ingerii','760','expo6',' 1650323564454',to_date('14-19-2008','dd-mm-
rrrr'),' 2750904577832');
insert into opere values('14', 'Ceahlaul','490','expo10',' 1780321678955',to_date('15-09-2008','dd-mm-
rrrr'),' 2750904577832');
insert into opere values('15', 'Pe malul Dunarii','900','expo10',' 2680319445343',to_date('15-08-
2008','dd-mm-rrrr'),' 1700321564665');
insert into opere values('16', 'Inlantuiri','1200','expo5',' 1780321678955',to_date('25-03-2008','dd-mm-
rrrr'),'2700319445343');


B. Interactiunea cu serverul Oracle prin intermediul
comenzilor sql (LDD si LMD).


set serveroutput on
DECLARE
BEGIN
/*-- . S se mreasc preul operelor cu 100 pentru operele care au preul mai mic de 500
RON
UPDATE opere
SET pret=pret+100
WHERE pret<500;
*/

/*-- S se reduc preul operelor din expoziia Pitoresc in peisajele romanesti cu
100.

UPDATE opere
SET pret=pret-100
WHERE cod_expo=(select cod_expo from expozitii where lower(nume)='pitoresc in
peisajele romanesti');
*/


--Sa se insereze o noua opera
insert into opere values ('129', 'Cisterna la vale,350,'expo1', '2830423553426', '1600101769956',
to_date ('06/06/13', 'dd/mm/yy'));

END;
/
--LMD insert,update,delete
set serveroutput on

accept v_cod_opera prompt('Introduceti codul operei pe care
vreti sa o mutate la expozitia expo1:');
accept v_vb prompt('Doriti realizarea
tranzactiei?[da/nu]');
define v_c_expo:='expo1'

DECLARE

v_opere opera.denumire%type;
vec1_rec opere%rowtype;

BEGIN
v_opere:=&v_cod_opera;
dbms_output.put_line('afisez datele despre opera
selectata:');
select * into vec1_rec from opere where denumire=v_opere;
dbms_output.put_line('codul operei:
'||vec1_rec.cod_opera||' numele: '||vec1_rec.denumire||'
pret: '||vec1_rec.pret||' cod expozitie:
'||vec1_rec.cod_expo);
IF '&v_vb'='da' THEN
UPDATE opere set cod_expo=&v_c_expo where
cod_opera=v_cod_opera;
dbms_output.put_line(Opera transferata la' || v_c_expo);
ELSE
dbms_output.put_line(Tranfer anulat);
END IF;
END;
/

INSERT INTO
echipa(cod_e,nume_e,nr_jucatori,camp_castigate,valoare,cod_
l)VALUES(80,'Sevillia',42,18,1325672,4);
DELETE FROM echipa where cod_e='80';
END;
/







C. Structuri alternative si repetitive.

- structura alternative IF
- Sa se mareasca pretul operei cu codul 123 avand
urmatoarele conditii: daca pretul operei este sub 500 RON
atunci se va mari de 3 ori pretul operei, daca pretul
operei este cuprins intre 500 si 800 atunci se va
dubla,altfel va creste cu 50%.

set serveroutput on
declare
v_pret opere.pret%type;
begin
select pret into v_pret from opere where cod_opera=123;
dbms_output.put_line ('Pretul initial este: '||v_pret);
if v_pret<500 then
v_pret:=3*v_pret;
elsif v_pret between 500 and 800 then
v_pret:=2*v_pret;
else
v_pret:=1.5*v_pret;
end if;
dbms_output.put_line('Pret final este: '||v_pret);
end;
/
-structura repetitiva
Sa se creeze o tabela in care vor fi stocate informatii despre
10 opere existente, folosind structura repetitive for .. loop

CREATE TABLE info_opere (denumire_opera VARCHAR2(30),
cod_opera number(4) not null,
pret number(10),
cnp_artist number(13);

SET SERVEROUTPUT ON
DECLARE
v_cod info_opere.cod_opera%type;
BEGIN
v_cod:=&v_cod;
FOR i in 1..10 LOOP
INSERT INTO
info_opere(&denumire_opera,v_cod,&pret,&cnp_artist;
v_cod:=v_cod+1;
END LOOP;
END;
/
select * from info_opere;
D. Tratarea exceptiilor.

- Implicite

--tratati exceptia implicita no_data_found
set serveroutput on
declare
v_nume_opera opera.denumire%type;
begin
select denumire into v_nume_opera from opere
where pret='3850';
dbms_output.put_line(v_nume_opera);
exception
when no_data_found then
dbms_output.put_line ('Nu exista aceasta opera!');
end;
/


---creati o exceptie care apare in cazul in care se
introduc insuficiente date intr-o tabela


set serveroutput on
declare
dateins exception;
pragma exception_init(dateins,-02290);
begin
insert into opere values(888,'Flori de
mac',6000,192421912435,1701);
exception when dateins then dbms_output.put_line('Date
insuficiente');
when others then dbms_output.put_line(Alta eroare
aparuta);
end;
/


- explicite

--cand nu exista opera cu codul respectiv
set serveroutput on
declare
invalid_opera exception;

begin
update opere
set denumire='Car cu pepeni'
where cod_opera=1876;

if sql%notfound then
raise invalid_opera;
end if;

exception
when invalid_opera then
dbms_output.put_line('Nu exista opera cu acest cod.');
end;
/










E. Gestionarea cursorilor: impliciti si expliciti.

- cursori impliciti

--sa se stearga o inregistrare si sa se contorizeze nr de
randuri sterse
SET SERVEROUTPUT ON
DECLARE
v_numar NUMBER(2);
BEGIN
DELETE FROM opere
WHERE pret='900';
v_numar:=SQL%ROWCOUNT;
DBMS_OUTPUT.PUT_LINE (v_numar ||' inregistrari sterse');
COMMIT;
END;
/

select * from opera;



- cursori expliciti

--afisati folosind un cursor toate operele care au pret
mai mare decat parametrul cursorului


set serveroutput on
declare
cursor c_opera(p_pret number) is
select cod_opera,denumire,pret,cnp_artist from opere
where pret>p_pret
order by pret;
v_pret number(10);
rec_opera c_opera%rowtype;--o dublura a cursorului opera

begin
v_pret:=500;
dbms_output.put_line (Opere al caror pret este mai mare de
'||v_pret);

if not c_opera%isopen then
open c_opera(v_pret);
end if;

loop
fetch c_opera into rec_opera;
exit when c_opera%notfound;
dbms_output.put_line('Cod_opera'||rec_opera.cod_opera||'den
umire opera'||rec_opera.denumire||', are pretul
'||rec_opera.pret);
end loop;
close c_opera;
end;
/