sgbd proiect

14
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.

Upload: alexandra-clonda

Post on 28-Dec-2015

12 views

Category:

Documents


0 download

DESCRIPTION

In SQL

TRANSCRIPT

Page 1: SGBD proiect

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.

Page 2: SGBD proiect

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);

Page 3: SGBD proiect

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',

'[email protected]');

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',

'[email protected]');

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',

'[email protected]');

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);

Page 4: SGBD proiect

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 ');

Page 5: SGBD proiect

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');

Page 6: SGBD proiect

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'));

Page 7: SGBD proiect

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;/

Page 8: SGBD proiect

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;/

Page 9: SGBD proiect

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

Page 10: SGBD proiect

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

Page 11: SGBD proiect

--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;/