Proiect Baze de Date
Proiect Baze de Date
Proiect Baze de Date
2012-2013
I.Descrierea problemei Pentru buna funcionare a unei firme este necesar o baz de date care s in evidena tuturor activitilor care au loc n cadrul firmei respective. O baz de date este un ansamblu de colecii de date aflate n interdependen, mpreun cu dicionarul de date care conine descrierea datelor i a legturilor dintre ele, fapt ce asigur interdependena datelor fa de aplicaii. Activitatea firmei MOB.CR se desfoar astfel: furnizorii aprovizioneaz magazia cu materiale pe baza unor facturi, materialele sunt stocate n magazie i mai apoi vndute clienilor.n urma achiziionrii unui material, fiecare client va primi un bon. Pentru accesul rapid la informaiile legate de aceste activiti am realizat o baz de date.Am pus accentul pe subiectele mai importante ale procesului economic, ajungnd astfel la urmtoarele tabele: FurnizoriCR, FacturiCR, MagazieCR, BonuriCR, Coninut_facturCR, Coninut_bonCR, MaterialeCR. Legturile dintre tabele Asocierile dintre mulimile de entiti se stabilesc n funcie de modul n care se desfoar activitatea modelat. Pentru aceasta, n continuare sunt explicate legturile dintre tabele: a) ntre tabelele FurnizoriCR i FacturiCR exist o legtur 1 la m: un furnizor poate emite mai multe facturi, iar o factur poate fi emis de un singur furnizor. Cheia primar din tabela printe (cheia primar este Cod_furnizor, iar tabela printe este FurnizoriCR) se adaug n tabela copil (FacturiCR) ca i cheie extern(Cod_furnizor). Cele dou trebuie s fie de acelai tip. b) ntre tabelele FacturiCR i MaterialeCR exist o legtura de tip muli la muli: o factur poate conine mai multe materiale, iar un material poate fi inclus n mai multe facturi. De aceea se adaug o tabel suplimentar Coninut_facturCR care va conine cheile primare ale tabelelor iniiale care vor fi trecute ca i cheie secundar n tabela Coninut_facturCR. Cheia primar a acestei tabele va fi una compus din Nr_factur i Cod_material. c) ntre tabelele MagazieCR i BonuriCR exist o legtur de tip 1 la m: o magazie emite mai multe bonuri de consum, iar un bon poate fi emis de la o singur magazie. Cheia primar Cod_magazie din tabela printe MagazieCR va deveni cheie extern n tabela copil BonuriCR. d) ntre tabelele BonuriCR i Materiale CR exist o legtur de tip muli la muli: ntr-un bon de consum pot fi cuprinse mai multe materiale, iar un material poate fi pe mai multe bonuri. De aceea se introduce o tabel suplimentar Coninut_bonCR care va conine cheile primare ale tabelelor iniiale care vor fi trecute ca i chei externe n tabela Coninut_bonCR. Cheia primar a acestei tabele va fi una compus din Nr_bon i Cod_material. Pentru crearea i definirea tipului de date din tabel am folosit comenzile de definire a datelor (LDD): CREATE, ALTER i DROP.
CREATE TABLE FurnizoriCR ( Cod_furnizorCR NUMBER(5) CONSTRAINT cod_fz_pk PRIMARY KEY, Denumire_furnizorCR CHAR(50) NOT NULL, Adresa_furnizorCR CHAR(50), Email_furnizorCR VARCHAR2(30) CONSTRAINT ck_mail UNIQUE, BancaCR CHAR(30), ContCR CHAR(13) );
Pentru cmpul Denumire_furnizorCR am adugat restricia NOT NULL, iar pentru cmpul Email_furnizorCR am adugat restricia UNIQUE.
CREATE TABLE MagazieCR ( Cod_magazieCR NUMBER(5) CONSTRAINT cod_magazie_pk PRIMARY KEY, Denumire_magazieCR CHAR(50) NOT NULL, GestionarCR CHAR(20) );
CREATE TABLE FacturiCR ( Numar_facturaCR NUMBER(5) CONSTRAINT Nr_fact_pk PRIMARY KEY, Data_facturaCR DATE, Cod_furnizorCR NUMBER(5) CONSTRAINT fk_cod_fz REFERENCES FurnizoriCR(Cod_furnizorCR) );
CREATE TABLE BonuriCR ( Numar_bonCR NUMBER(3) CONSTRAINT nr_bon_pk PRIMARY KEY, Data_bonCR DATE, Cod_magazieCR NUMBER(5) CONSTRAINT cod_mag_fk REFERENCES MagazieCR(Cod_magazieCR) );
CREATE TABLE MaterialeCR ( Cod_materialeCR NUMBER(5) CONSTRAINT cod_materiale_pk PRIMARY KEY, Denumire_materialeCR CHAR(50) NOT NULL, Unitate_de_masuraCR NUMBER(3) );
CREATE TABLE Continut_facturaCR ( Numar_facturaCR NUMBER(5) CONSTRAINT fk_nr_fact REFERENCES FacturiCR(Numar_facturaCR), Cod_materialeCR NUMBER(5) CONSTRAINT fk_cod_mat REFERENCES MaterialeCR(Cod_materialeCR), Cantitate_intrataCR NUMBER(5) ); ALTER TABLE Continut_facturaCR ADD CONSTRAINT nr_fact_cod_mat_pr PRIMARY KEY(Numar_facturaCR, Cod_materialeCR);
Pentru acest tabel cheia primar va fi una compus din Numr_facturCR i Cod_materialCR.
CREATE TABLE Continut_bonCR ( Numar_bonCR NUMBER(3) CONSTRAINT fk_nr_bon REFERENCES BonuriCR(Numar_bonCR), Cod_materialeCR NUMBER(5) CONSTRAINT fk_cod_mat_1 REFERENCES MaterialeCR(Cod_materialeCR), Cantitate_iesitaCR NUMBER(5) ); ALTER TABLE Continut_bonCR ADD CONSTRAINT nr_bon_cod_mat_1_pk PRIMARY KEY(Numar_bonCR, Cod_materialeCR);
II.Aplicaii asupra tabelelor folosind comenzi de definire a datelor(DDL) Structura tabelelor poate fi modificat ulterior, lucru care se realizeaz cu ajutorul comenzii ALTER. n continuarea voi da exemple de cteva modificri pe care le-am efectuat asupra tabelelor. 1.Adugai coloana CNP n tabela FurnizoriCR avnd tipul Varchar2(13) i apoi tergeti-o. ALTER TABLE FurnizoriCR ADD (CNP VARCHAR2(13)); ALTER TABLE FurnizoriCR DROP COLUMN CNP;
2.Modificai tabela FurnizoriCR astfel nct cmpul Email_furnizorCR s fie de tipul [email protected] sau [email protected] etc. ALTER TABLE FurnizoriCR ADD CONSTRAINT verif_mail CHECK (Email_furnizorCR LIKE '%@%.%');
3. n tabela Coninut_facturCR adugai restricia de integritate verif_cantintrata astfel nct numerele introduse n cmpul Cantitate_intratCR s fie cuprinse ntre 10 i 500. ALTER TABLE Continut_facturaCR ADD (Cantitate_intrataCR BETWEEN 10 AND 500); CONSTRAINTS verif_cantintrata CHECK
4.n tabela FurnizoriCR redenumii cmpul Adresa_furnizorCR n Domiciliu_furnizorCR. ALTER TABLE FurnizoriCR RENAME COLUMN Adresa_furnizorCR TO Domiciliu_furnizorCR;
5. Modificai tabela MagazieCR astfel nct cmpul GestionarCR s fie de tipul CHAR(50). ALTER TABLE MagazieCR MODIFY (GestionarCR CHAR(50));
6. Dezactivai restricia de integritate verif_cantintrata. ALTER TABLE Continut_facturaCR DISABLE CONSTRAINT verif_cantintrata;
7. n tabela Magazie adugai cmpul Adresa_magazieCR de tip CHAR(50). ALTER TABLE MagazieCR ADD (adresa_magazieCR CHAR(50));
IV.Aplicaii folosind comenzi de manipulare a datelor(DML) 1.Inserai date n tabelul FurnizoriCR. INSERT INTO FurnizoriCR VALUES (1, 'Popescu Marcel', 'Bucuresti', '[email protected]', 'BCR', 398765); INSERT INTO FurnizoriCR VALUES(4, 'Mircea Daniela', 'Constanta', '[email protected]', 'BRD', 764321); INSERT INTO FurnizoriCR VALUES(11, 'Bucataru Mihaela', 'Baia-Mare', '[email protected]', 'BT', 237634); INSERT INTO FurnizoriCR VALUES(23, 'Pavel Cosmis', 'Iasi', '[email protected]', 'BCR', 567234); INSERT INTO FurnizoriCR VALUES(14, 'Popoiu Sorina', 'Timisoara', '[email protected]', 'BT', 956521); INSERT INTO FurnizoriCR VALUES(29, 'Dumitru Ion', 'Hunedoara', '[email protected]', 'BRD', 743199); INSERT INTO FurnizoriCR VALUES(12, 'Popa Flavia', 'Iasi', '[email protected]', 'BCR', 123456); INSERT INTO FurnizoriCR VALUES(13, 'Florescu Damian', 'Bucuresti', '[email protected]', 'BRD', 876256); INSERT INTO FurnizoriCR VALUES(22, 'Dimitrie Vasile', 'Baia Mare', '[email protected]', 'BT', 876321); INSERT INTO FurnizoriCR VALUES(24, 'Mardare Ionela', 'Constanta', '[email protected]', 'BCR', 590231);
2.Inserai date n tabelul MagazieCR ALTER TABLE MagazieCR ADD(Salariul_gestionarCR NUMBER(10)); ALTER TABLE MagazieCR ADD(Dataangajare_gestionarCR DATE); ALTER TABLE MagazieCR ADD(id_gestionarCR NUMBER(2));
INSERT INTO MagazieCR Values(2, 'Kappa', 'Popa Ion', 3000, to_date('17-06-1991', 'dd-mm-yyyy'), 1); INSERT INTO MagazieCR Values(11, 'Terra', 'Anton Mircea', 2100, to_date('02-11-1995', 'dd-mm-yyyy'), 2); INSERT INTO MagazieCR Values(13, 'Euro', 'Ilie Dan', 1900, to_date('23-01-2000', 'dd-mm-yyyy'), 3); INSERT INTO MagazieCR Values(15, 'Kondo', 'Marinescu Cristi', 2500, to_date('11-03-1994', 'dd-mm-yyyy'), 4); INSERT INTO MagazieCR Values(18, 'Main', 'Criscu Mihai', 1500, to_date('20-07-1999', 'dd-mm-yyyy'), 5); INSERT INTO MagazieCR Values(20, 'Cargo', 'Damian Cosmin', 1600, to_date('20-09-1994', 'dd-mm-yyyy'), 6); INSERT INTO MagazieCR Values(21, 'Dingo', 'Carpone Mircea', 2000, to_date('23-02-1994', 'dd-mm-yyyy'), 7); INSERT INTO MagazieCR Values(23, 'Marko', 'Cozma Aurel', 2300, to_date('14-05-1997', 'dd-mm-yyyy'), 8);
INSERT INTO MagazieCR Values(24, 'Alka', 'Chiciura Andrei', 3100, to_date('01-01-1992', 'dd-mm-yyyy'), 9); INSERT INTO MagazieCR Values(25, 'Blake', 'Gherea Flavian', 2650, to_date('07-09-2001', 'dd-mm-yyyy'), 10);
3.Inserai date n tabelul FacturiCR INSERT INTO FacturiCR VALUES(23, to_date('14-06-2009', 'dd-mm-yyyy'), 1); INSERT INTO FacturiCR VALUES(34, to_date('21-05-2008', 'dd-mm-yyyy'), 11); INSERT INTO FacturiCR VALUES(36, to_date('19-09-2010', 'dd-mm-yyyy'), 23);
INSERT INTO FacturiCR VALUES(46, to_date('23-10-2009', 'dd-mm-yyyy'), 12); INSERT INTO FacturiCR VALUES(15, to_date('18-01-2010', 'dd-mm-yyyy'), 13); INSERT INTO FacturiCR VALUES(14, to_date('15-06-2009', 'dd-mm-yyyy'), 22); INSERT INTO FacturiCR VALUES(16, to_date('07-07-2007', 'dd-mm-yyyy'), 11); INSERT INTO FacturiCR VALUES(19, to_date('24-05-2009', 'dd-mm-yyyy'), 24); INSERT INTO FacturiCR VALUES(21, to_date('19-06-2010', 'dd-mm-yyyy'), 22); INSERT INTO FacturiCR VALUES(30, to_date('10-10-2010', 'dd-mm-yyyy'), 23);
4.Inserai date n tabelul BonuriCR INSERT INTO BonuriCR VALUES(50, to_date('19-09-2010', 'dd-mm-yyyy'), 15); INSERT INTO BonuriCR VALUES(52, to_date('16-07-2011', 'dd-mm-yyyy'), 20); INSERT INTO BonuriCR VALUES(44, to_date('15-08-2009', 'dd-mm-yyyy'), 11); INSERT INTO BonuriCR VALUES(49, to_date('23-06-2010', 'dd-mm-yyyy'), 13); INSERT INTO BonuriCR VALUES(48, to_date('02-06-2011', 'dd-mm-yyyy'), 2); INSERT INTO BonuriCR VALUES(55, to_date('06-11-2011', 'dd-mm-yyyy'), 11); INSERT INTO BonuriCR VALUES(56, to_date('14-11-2009', 'dd-mm-yyyy'), 21); INSERT INTO BonuriCR VALUES(57, to_date('28-01-2010', 'dd-mm-yyyy'), 20); INSERT INTO BonuriCR VALUES(58, to_date('19-10-2011', 'dd-mm-yyyy'), 21); INSERT INTO BonuriCR VALUES(59, to_date('22.02.2009', 'dd-mm-yyyy'), 15);
5.Inserai date n tabelul MaterialeCR ALTER TABLE MaterialeCR MODIFY (unitate_de_masuraCR VARCHAR2(20)); INSERT INTO MaterialeCR Values(12345, 'Rigips', 'kg'); INSERT INTO MaterialeCR Values(25647, 'Folie aluminiu', 'mm'); INSERT INTO MaterialeCR Values(63219, 'Adeziv structurali', 'g'); INSERT INTO MaterialeCR Values(95412, 'Ciment', 'm^3'); INSERT INTO MaterialeCR Values(10762, 'Caramida', 'm^2');
INSERT INTO MaterialeCR Values(20978, 'Nisip', 'm^3'); INSERT INTO MaterialeCR Values(14523, 'BCA', 'm^2'); INSERT INTO MaterialeCR Values(25678, 'Boltzari', 'm^2'); INSERT INTO MaterialeCR VALUES(15402, 'Tigla acoperis', 'm^2'); INSERT INTO MaterialeCR Values(45609, 'Polistiren', 'mm');
6.Inserai date n tabelul Coninut_facturCR. INSERT INTO Continut_facturaCR VALUES(23, 12345, 150); INSERT INTO Continut_facturaCR VALUES(34, 25647, 200); INSERT INTO Continut_facturaCR VALUES(36, 63219, 50); INSERT INTO Continut_facturaCR VALUES(46, 95412, 170); INSERT INTO Continut_facturaCR VALUES(15, 10762, 100); INSERT INTO Continut_facturaCR VALUES(14, 20978, 120); INSERT INTO Continut_facturaCR VALUES(16, 14523, 130); INSERT INTO Continut_facturaCR VALUES(19, 25678, 80); INSERT INTO Continut_facturaCR VALUES(21, 15402, 60); INSERT INTO Continut_facturaCR VALUES(30, 45609, 75);
7.Inserai date n tabelul Coninut_bonCR. INSERT INTO Continut_bonCR VALUES(50, 12345, 148); INSERT INTO Continut_bonCR Values(52, 25647, 195); INSERT INTO Continut_bonCR VALUES(44, 63219, 47); INSERT INTO Continut_bonCR VALUES(49, 95412, 170 ); INSERT INTO Continut_bonCR VALUES(48, 10762, 99); INSERT INTO Continut_bonCR VALUES(55, 20978, 110); INSERT INTO Continut_bonCR VALUES(56, 14523, 125); INSERT INTO Continut_bonCR VALUES(57, 25678, 80); INSERT INTO Continut_bonCR VALUES(58, 15402, 55); INSERT INTO Continut_bonCR VALUES(59, 45609, 75);
8.S se mreasc cu 20% salariul gestionarilor al cror nume ncep cu litera C. UPDATE magazieCR SET salariul_gestionarCR=1.2*salariul_gestionarCR WHERE gestionarCR LIKE 'C%';
9.S se modifice domiciliul furnizorului cu cod 4 astfel nct s devin egal cu domiciliul furnizorului cu cod 22. UPDATE furnizoriCR SET domiciliu_furnizorCR=(SELECT cod_furnizorCR=22) WHERE cod_furnizorCR=4;
domiciliu_furnizorCR
FROM
furnizoriCR
WHERE
10.Creai tabela GestionariCR astfel nct s conin toate cmpurile din tabela FurnizoriCR. CREATE TABLE GestionariCR AS SELECT * FROM FurnizoriCR;
11.S se modifice salariul gestionarului de la magazia MAIN astfel nct s devin egal cu salariul gestionarului cu codul magaziei 13. UPDATE MagazieCR SET salariul_gestionarCR=(SELECT salariul_gestionarCR cod_magazieCR=13) WHERE UPPER(denumire_magazieCR)='MAIN';
FROM
MagazieCR
WHERE
12. S se mreasc salariul gestionarului care s-a angajat n anul 1991 la 3000. UPDATE magazieCR SET salariul_gestionarCR=3000 WHERE EXTRACT (year FROM dataangajare_gestionarCR)<=1991;
13.S se afieze numele i e-mail-ul furnizorului cu domiciliul n Bucureti i ordonai alfabetic dup nume. SELECT denumire_furnizorCR, email_furnizorCR FROM FurnizoriCR WHERE domiciliu_furnizorCR LIKE '%Bucuresti%' ORDER BY denumire_furnizorCR;
14. Creai tabela Furnizori_P astfel nct s conin toate cmpurile din tabela FurnizoriCR doar pentru furnizorii al cror nume ncepe cu litera P. CREATE TABLE Furnizori_P AS SELECT * FROM FurnizoriCR WHERE denumire_furnizorCR LIKE 'P%';
15.S se tearg furnizorii din tabela Furnizori_P care au codul minim. DELETE FROM Furnizori_P WHERE cod_furnizorCR=(SELECT MIN(cod_furnizorCR) FROM Furnizori_P);
16.S se afieze numele i domiciliul furnizorilor care nu au emis facturi. SELECT denumire_furnizorCR, domiciliu_furnizorCR FROM FurnizoriCR WHERE cod_furnizorCR NOT IN (SELECT cod_furnizorCR FROM FacturiCR);
17. Introducei n tabela furnizoriCR o nou nregistrare care s conin datele urmtoare : 27 Carabulea Roxana , Constana, [email protected], BCR, 930227. Apoi tergei-o. INSERT INTO FurnizoriCR VALUES(27, 'Carabulea Roxana', 'Constanta', '[email protected]', 'BCR', 930227);
18.S se afieze numele, domiciliul furnizorilor i data emiterii facturii SELECT denumire_furnizorCR, domiciliu_furnizorCR, data_facturaCR FROM FurnizoriCR fu, FacturiCR fa WHERE fu.cod_furnizorCR=fa.cod_furnizorCR;
SAU SELECT denumire_furnizorCR, domiciliu_furnizorCR, data_facturaCR FROM FurnizoriCR NATURAL JOIN FacturiCR ;
19.S se afieze numele i salariul gestionarilor a cror nume incep cu litera C. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE UPPER(gestionarCR) LIKE 'C%';
20.S se afieze numele i salariul gestionarilor angajai n anul 1994. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE dataangajare_gestionarCR BETWEEN TO_DATE ('01-01-1994','dd-mm-yyyy') AND TO_DATE ('31-12-1994', 'dd-mm-yyyy');
22.Calculai media salariilor gestionarilor cu 2 zecimale. SELECT ROUND(AVG (salariul_gestionarCR),2) Salariu_mediu FROM MagazieCR;
23.Afiai numrul total de gestionari, numele gestionarilor care au salariul ntre 1500 i 2000 i ordonai alfabetic dup nume. SELECT gestionarCR, COUNT(gestionarCR) Numar_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 2000 GROUP BY gestionarCR ORDER BY gestionarCR;
24.Afiai numrul total de gestionari, pentru fiecare din urmtoarele nivele: niv1 cei care au salariul ntre 1000 i 1999, niv2 salariul ntre 2000 i 2999 i nivelul 3 salariul ntre 3000 i 3999. SELECT 'niv1 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1000 AND 1999
UNION SELECT 'niv2 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 2000 AND 2999 UNION SELECT 'niv3 sal' AS Niv_sal, COUNT(gestionarCR) Nr_gestionari FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 3000 AND 3999;
25.Afiai numele gestionarului i data bonului i numrul gestionarilor care nu au bonuri emise. SELECT gestionarCR, data_bonCR, numar_bonCR FROM MagazieCR m, BonuriCR b WHERE m.cod_magazieCR=b.cod_magazieCR(+) ORDER BY data_bonCR;
SAU SELECT gestionarCR, data_bonCR, numar_bonCR FROM BonuriCR b RIGHT OUTER JOIN MagazieCR m ON (b.cod_magazieCR=m.cod_magazieCR) ORDER BY data_bonCR;
SAU SELECT gestionarCR, data_bonCR, numar_bonCR FROM MagazieCR m LEFT OUTER JOIN BonuriCR b ON (m.cod_magazieCR=b.cod_magazieCR) ORDER BY data_bonCR;
26.Afiai gestionarii cu salariul cuprins ntre 1500 i 3000. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 3000;
27.Afiai furnizorii care aparin bncilor BRD sau BCR i ordonai invers-alfabetic dup nume. SELECT denumire_furnizorCR, bancaCR FROM FurnizoriCR WHERE BancaCR IN ('BCR','BRD') ORDER BY denumire_furnizorCR DESC;
28.Afiai numele furnizorilor care au a doua liter o. SELECT denumire_furnizorCR FROM FurnizoriCR WHERE denumire_furnizorCR LIKE '_o%';
29. Afiai cantitatea total intrat, denumirea materialului i unitatea de msur pentru cantitatea total mai mare dect 100. SELECT denumire_materialeCR, unitate_de_masuraCR, SUM(cantitate_intrataCR) FROM continut_facturaCR cf, materialeCR m WHERE cf.cod_materialeCR=m.cod_materialeCR GROUP BY denumire_materialeCR, unitate_de_masuraCR HAVING SUM(cantitate_intrataCR)>100 ORDER BY denumire_materialeCR;
30.Calculai numrul de gestionari angajai nainte de 31.decembrie.2000 SELECT salariul_gestionarCR, gestionarCR, COUNT(gestionarCR) FROM MagazieCR WHERE dataangajare_gestionarCR<TO_DATE('31-12-2000', 'dd-mm-yyyy') GROUP BY salariul_gestionarCR, gestionarCR;
31.Calculai bonusul gestionarilor n funcie de salariul lor: -6% din salariul dac salariul >3000 -4% din salariul dac salariul ntre 2000 i 3000 -2% din salariul dac salariul ntre 1600 i 2000.Pentru celelalte bonus=0. SELECT gestionarCR, salariul_gestionarCR, CASE WHEN salariul_gestionarCR>3000 THEN 0.06*salariul_gestionarCR WHEN salariul_gestionarCR BETWEEN 2000 AND 3000 THEN 0.04*salariul_gestionarCR WHEN salariul_gestionarCR BETWEEN 1600 AND 2000 THEN 0.02*salariul_gestionarCR ELSE 0 END bonus FROM MagazieCR;
32.S se afieze gestionarii care au salariul ntre 1500 i 3000 fr cei care au salariul 1600 i 2000. SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR BETWEEN 1500 AND 3000 MINUS SELECT gestionarCR, salariul_gestionarCR FROM MagazieCR WHERE salariul_gestionarCR IN (1600, 2000);
33.S se afieze furnizorii cu domiciliul n Bucureti i gestionarii care au salariul peste 2000. SELECT denumire_furnizorCR FROM FurnizoriCR WHERE domiciliu_furnizorCR LIKE 'Bucuresti' UNION SELECT gestionarCR FROM MagazieCR WHERE salariul_gestionarCR>2000;
34.S se afieze toi gestionarii angajai n 1994 cu salariul mai mare de 2000. SELECT * FROM magazieCR WHERE EXTRACT (YEAR FROM dataangajare_gestionarCR)=1994 INTERSECT SELECT * FROM magazieCR WHERE salariul_gestionarCR>2000;
35.S se afieze materialele al cror cod se termin cu cifra 2. SELECT * FROM MaterialeCR WHERE (SUBSTR(cod_materialeCR, length(cod_materialeCR),1))='2';
36.S se afieze ultima zi a lunii urmtoare de la data facturrii. SELECT data_facturaCR, LAST_DAY(add_months(data_facturaCR, 1)) AS Ultima_zi FROM FacturiCR;
37.S se afieze furnizorii care au acelai domiciliu cu furnizorul al crui cod este 4. SELECT * FROM FurnizoriCR WHERE domiciliu_furnizorCR=(SELECT domiciliu_furnizorCR FROM FurnizoriCR WHERE cod_furnizorCR=4);
38.S se afle numrul bncii din top la care au cont furnizorii n funcie de banca la care sunt nscrii.Dac banca este BCR atunci NR1.Dac banca este BRD atunci NR2.Dac banca este Raiffeisen Bank, atunci NR3.Pentru celelalte se consider c nu sunt n TOP3.
SELECT bancaCR, DECODE(UPPER(bancaCR), 'BCR', 'NR1', 'BRD', 'NR2', 'RaiffeisenBank', 'NR3', 'NOT IN TOP3')NrBanca FROM FurnizoriCR; SAU SELECT bancaCR, CASE WHEN UPPER(bancaCR)='BCR' THEN 'NR1' WHEN UPPER(bancaCR)='BRD' THEN 'NR2' WHEN UPPER(bancaCR)='RAIFFEISENBANK' THEN 'NR3' ELSE 'NOT IN TOP3' END NrBanca FROM FurnizoriCR;
39.S se afieze denumirea furnizorilor i gestionarii ca produs cartezian. SELECT f.denumire_furnizorCR, m.gestionarCR FROM furnizoriCR f, magazieCR m;
40.S se realizeze o tabel virtual cu toi furnizorii care au domiciliul n Bucureti. CREATE VIEW tabv_buc AS SELECT * FROM FurnizoriCR WHERE LOWER(domiciliu_furnizorCR) LIKE 'Bucuresti';
Dac dorim s o tergem dup folosim: DROP VIEW tabv_buc; 41.S se realizeze o tabel virtual care s conin materialele care au ca unitate de msur m^2.Tabela virtual nu va putea fi actualizat.
CREATE VIEW tabv_mat_m2 AS SELECT * FROM MaterialeCR WHERE unitate_de_masuraCR LIKE 'm^2' WITH READ ONLY;
42.S se creeze un index pentru facilitarea accesului mai rapid la salariul gestionarilor magaziilor. CREATE INDEX idx_sal ON MagazieCR(salariul_gestionarCR);
43.S se creeze un index pentru facilitarea accesului mai rapid la cantitatea ieit de materiale pe baza bonurilor. CREATE INDEX idx_cant_out ON Continut_bonCR(cantitate_iesitaCR);
44.S se creeze un sinonim mag pentru tabela magazieCR, s se interogheze aceast tabel folosind sinonimul dat. CREATE SYNONYM mag FOR magazieCR; SELECT *FROM mag;
45. S se creeze un sinonim fur pentru tabela furnizoriCR, s se interogheze aceast tabel folosind sinonimul dat. CREATE SYNONYM fur FOR furnizoriCR; SELECT *FROM fur;
46.S se creeze o secven care s aib valoarea de nceput 150, s se incrementeze cu pasul 2, s aib valoarea maxim 250 i s nu cicleze. OBS: Secvena poate fi folosit pentru a aduga date n una sau mai multe tabele. CREATE SEQUENCE secv1 START WITH 150 INCREMENT BY 2 MAXVALUE 250 NOCYCLE;
47.S se creeze o secven care s aib valoarea de nceput 2500, s se incrementeze cu pasul 100, s aib valoarea maxim 6500 i s cicleze.
CREATE SEQUENCE secv2 START WITH 2500 INCREMENT BY 100 MAXVALUE 6500 CYCLE;
48. S se modifice pasul de incrementare pentru secvena anterioar de la ex 46 la 5: ALTER SEQUENCE secv1 INCREMENT BY 5;
49. Folosirea unui cluster a) creare cluster CREATE CLUSTER cod_furnizorCR_clus (cod_furnizorCR NUMBER(5,0));
c) creare tabel n cluster CREATE TABLE furnizoriCR_2 (cod_furnizorCR NUMBER(5,0), denumire_furnizorCR CHAR(50)) CLUSTER cod_furnizorCR_clus (cod_furnizorCR);
50.Crearea unei tabele partiionate a) RANGE CREATE TABLE gest_partitie (codfurn NUMBER(4), den_furn NUMBER(3) NOT NULL, banca NUMBER(10), termenliv date) PARTITION BY RANGE (termenliv) (PARTITION GEST1 VALUES LESS THAN (to_date('07-jun-2010', 'dd-mon-yyyy')), PARTITION GEST2 VALUES LESS THAN (to_date('29-sep-2012', 'dd-mon-yyyy')), PARTITION GEST3 VALUES LESS THAN (to_date('06-dec-2013', 'dd-mon-yyyy')));
b) LIST CREATE TABLE maga_partitie (cod_mag NUMBER(3), denumire_mag VARCHAR2(15), nr_ore NUMBER(30)) PARTITION BY LIST (nr_ore) (PARTITION paart1 VALUES (5,7,9), PARTITION paart2 VALUES (10,15,18), PARTITION paart3 VALUES (20,25,28));