sgbd proiect
DESCRIPTION
In SQLTRANSCRIPT
1. Descrierea bazei de date
Baza de date este formată din patru tabele cu legături între ele, pentru a asigura o
implementare cât mai accesibilă și mai potrivită a gestiunii operelor vândute într-o galerie de
artă.
Cele patru tabele conțin date despre expoziții, clienți, opere și artiști, astfel:
- EXPOZIȚIE: codul expoziției, numele expoziției, data deschiderii, data închiderii,
adresa acesteia;
- ARTIȘTI: CNP artist, nume artist, adresă, telefon, e-mail;
- CLIENȚI: CNP client, nume client, adresă, telefon, e-mail;
- OPERE: codul operei, expoziția din care face parte, artistul care a realizat-o , clientul
care a cumpărat-o, prețul, data vânzării.
Legăturile între tabele se fac prin intermediul tabelei OPERE, o operă având ca atribute
(cheie străină compusă) cnp-ul artistului, cnp-ul autorului și codul expoziției.
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_deschideriiData_inchideri
iCod_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. Adăugarea de înregistări în tabele
Pentru tabela ARTIȘTI:
insert into artisti values('2890423295890','Maria Ionescu','Bucuresti, Bd. Magheru, nr. 50', '0213456798',
insert into artisti values('1780321678955', 'Ciobotea Andrei', 'Bucuresti, Bd. Regina Elisabeta, nr. 17',
'0213456889', '[email protected]');
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',
insert into artisti values('2680319445343','Irimia Luminita','Targu Jiu, Bd. Constantin Brancusi, nr. 12',
'0733451221', '[email protected]');
insert into artisti values('1690423444534','Miclea Dragos','Filipestii de padure,Str. Centrala, nr. 45',
'0766781234', '[email protected]');
insert into artisti values('1561123455456','Gurzun Lucian','Bucuresti, Bd. Crangasi, nr. 120', '0213467556',
insert into artisti values('2750904589032','Papusoiu Mariana','Cluj-Napoca, Bd. Maracinelui, nr. 76',
'0766543321', '[email protected]');
insert into artisti values('1650323564454','Dan Cristian','Constanta, Str. Popa Tatu, nr. 554', '0732675342', '[email protected]');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','[email protected]');
insert into clienti values('2870312879445','Ionescu Ioana','Campina, Str. Alexandru Odobescu, nr.
29','0745221123',[email protected]);
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','[email protected]');
insert into clienti values('2700319445343','Pioara Diana','Targu Mures, Bd. Constantin cel mare, nr.
132','0722451221','[email protected]');
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','[email protected]');
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','[email protected]');
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 onDECLAREBEGIN
/*-- . Să se mărească prețul operelor cu 100 pentru operele care au prețul mai mic de 500
RON
UPDATE opereSET pret=pret+100WHERE pret<500;*/
/*-- Să se reducă prețul operelor din expoziția ”Pitoresc in peisajele romanesti” cu 100.
UPDATE opereSET pret=pret-100
WHERE cod_expo=(select cod_expo from expozitii where lower(nume)='pitoresc in
peisajele romanesti');
*/
--Sa se insereze o noua operainsert into opere values ('129', 'Cisterna la vale’,350,'expo1', '2830423553426', '1600101769956',
to_date ('06/06/13', 'dd/mm/yy'));
END;/--LMD insert,update,deleteset 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;
BEGINv_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);ELSEdbms_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 ondeclarev_pret opere.pret%type;beginselect pret into v_pret from opere where cod_opera=123;dbms_output.put_line ('Pretul initial este: '||v_pret);if v_pret<500 thenv_pret:=3*v_pret;elsif v_pret between 500 and 800 thenv_pret:=2*v_pret;elsev_pret:=1.5*v_pret;end if;dbms_output.put_line('Pret final este: '||v_pret);end;/
-structura repetitivaSa 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 ONDECLAREv_cod info_opere.cod_opera%type;BEGINv_cod:=&v_cod;FOR i in 1..10 LOOPINSERT 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_foundset serveroutput ondeclarev_nume_opera opera.denumire%type;beginselect denumire into v_nume_opera from operewhere pret='3850';dbms_output.put_line(v_nume_opera);exceptionwhen no_data_found thendbms_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 ondeclaredateins exception;pragma exception_init(dateins,-02290); begininsert 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 respectivset serveroutput ondeclareinvalid_opera exception;
begin
update opereset denumire='Car cu pepeni'where cod_opera=1876;
if sql%notfound thenraise invalid_opera;end if;
exceptionwhen invalid_opera thendbms_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 sterseSET SERVEROUTPUT ONDECLAREv_numar NUMBER(2);BEGINDELETE FROM opereWHERE 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 ondeclarecursor c_opera(p_pret number) isselect cod_opera,denumire,pret,cnp_artist from operewhere pret>p_pretorder by pret;v_pret number(10);rec_opera c_opera%rowtype;--o dublura a cursorului opera
beginv_pret:=500;dbms_output.put_line (Opere al caror pret este mai mare de '||v_pret);
if not c_opera%isopen thenopen c_opera(v_pret);end if;
loopfetch c_opera into rec_opera;exit when c_opera%notfound;dbms_output.put_line('Cod_opera'||rec_opera.cod_opera||'denumire opera'||rec_opera.denumire||', are pretul '||rec_opera.pret);end loop;close c_opera;end;/