Sunteți pe pagina 1din 18

EXAMENUL DE ATESTAT PROFESIONAL LA INFORMATIC, 2010 MATEMATIC - INFORMATIC NEINTENSIV

REZOLVAREA SUBIECTELOR PROBEI PRACTICE BAZE DE DATE - Oracle

Subiectul nr.1
S se creeze o tabel cu structura: Cod_numeric_personal,Numele,Data_angajarii, Data_naterii i s se introduc 8 articole cu date care s corespund cerinelor urmtoare: a)S se afieze pe ecran toi angajaii cu o cevchime mai mare de 10 ani. b)S se afieze toate persoanele a cror zi de natere se srbtorete astzi. Crearea structurii tabelului CREATE TABLE Angajati (Cod_numeric_personal VARCHAR(13) PRIMARY KEY, Numele VARCHAR(50) , Data_angajarii DATE, Data_nasterii DATE) Inserarea datelor in tabel INSERT INTO Angajati VALUES ('1500210384145','Popescu Ion', '12-04-1998', '10-02-1950') INSERT INTO Angajati VALUES ('1581010384045','Preda Mihai', '12-10-2005', '10-10-1958') INSERT INTO Angajati VALUES ('1800505384010','Deaconu Ana', '25-08-2009', '05-05-1980') INSERT INTO Angajati VALUES ('1701212384510','Vasilescu Dorel', '01-01-1998', '12-12-1970') INSERT INTO Angajati VALUES ('1651111384511','Bujor Adelina', '25-04-1985', '11-11-1965') INSERT INTO Angajati VALUES ('1751111384523','Grigorescu Radu', '25-04-2000', '11-11-1975') INSERT INTO Angajati VALUES ('1681111384525','Croitoru Andreea', '25-10-1989', '11-11-1968') INSERT INTO Angajati VALUES ('1800407384141','Voinea Mihaela', '25-10-2006', '07-04-1980') Cerina a) SELECT * FROM Angajati WHERE CURRENT_DATE - Data_angajarii>3650 Cerina b) SELECT * FROM Angajati WHERE (LAST_DAY(CURRENT_DATE)-CURRENT_DATE=LAST_DAY(Data_nasterii)-Data_nasterii) AND MOD(MONTHS_BETWEEN(CURRENT_DATE,Data_nasterii),12)=0

Subiectul nr.2
S se creeze o tabel cu structura: Numr bilet, Ora, Pre, Numr_vagon i s se introduc 8 articole. Cerine a)S se calculeze suma realizat n urma vnzrii tuturor biletelor nregistrate n tabel. b)S se afieze pe ecran numrul de bilete vndute cu destinaia un anumit ora X, citit de la tastatur. Crearea structurii tabelului CREATE TABLE Bilete (numar_bilet NUMBER(10) PRIMARY KEY, oras VARCHAR(50) , pret NUMBER(5,2), numar_vagon NUMBER(2,0)) Inserarea datelor in tabel

INSERT INTO Bilete VALUES (1,'Bucuresti', 25, 2) INSERT INTO Bilete VALUES (2,'Sibiu', 45, 1) INSERT INTO Bilete VALUES (3,'Bucuresti', 28.50, 2) INSERT INTO Bilete VALUES (4,'Rm. Valcea', 17, 4) INSERT INTO Bilete VALUES (5,'Calimanesti', 20, 1) INSERT INTO Bilete VALUES (6,'Bucuresti', 30, 6) INSERT INTO Bilete VALUES (7,'Sibiu', 40, 6) INSERT INTO Bilete VALUES (8,'Rm. Valcea', 20.5, 4) Cerina a) SELECT SUM(pret) "Vanzare totala" FROM Bilete Cerina b) SELECT SUM(pret) "Vanzare totala" FROM Bilete WHERE UPPER(oras)=UPPER(:Destinatie)

Subiectul nr.3
S se creeze o tabel cu structura : Cod_caset. Nume_film, Actor_principal, Tip. S se introduc n tabel minimum 8 articole , cu date care s corespund urmtoarelor cerine: a)S se tearg din tabel toate filmele de tip HORROR. b)S se listeze pe monitor toate filmele n care joac actorul RICHARD GERE. Crearea structurii tabelului CREATE TABLE Casete (cod_caseta NUMBER(10) PRIMARY KEY, nume_film VARCHAR(50) , actor_principal VARCHAR2(50), tip VARCHAR2(30)) Inserarea datelor in tabel INSERT INTO Casete VALUES (1,'Morometii', 'Victor Rebegiuc', 'Drama') INSERT INTO Casete VALUES (2,'Toamna la New York', 'Richard Gere', 'Drama') INSERT INTO Casete VALUES (3,'Tacerea mieilor', 'Anthony Hopkins', 'Horror') INSERT INTO Casete VALUES (4,'The Shining', 'Jack Nicholson', 'Horror') INSERT INTO Casete VALUES (5,'Nea Marin miliardar', 'Amza Pellea', 'Comedie') INSERT INTO Casete VALUES (6,'Cavalerii mesei rotunde', 'Richard Gere', 'Aventura') INSERT INTO Casete VALUES (7,'Afaceri interne', 'Richard Gere', 'Aventura') INSERT INTO Casete VALUES (8,'Cel mai iubit dintre pamanteni', 'Stefan Iordache', 'Drama') Cerina a) Afiarea filmelor Horror n vederea identificrii nregistrrilor ce vor fi terse: SELECT * FROM Casete WHERE UPPER(tip)='HORROR' tergerea efectiv a filmelor Horror DELETE FROM Casete WHERE UPPER(tip)='HORROR' Cerina b) SELECT * FROM Casete WHERE UPPER(actor_principal)='RICHARD GERE'

Subiectul nr.4
S se creeze o tabel cu urmtoarea structur:Cod_ furnizor, Cod_material, material, Pret, Cantitate. S se introduc n tabel minimum 8 articole. Cerine: Nume_

a)S se afieze toate ofertele pentru materialul X dat de la tastatur, cresctor, dup preul oferit. b)S se afieze preul total al materialelor oferite de furnizorul Y- citit de la tastatur. Datele introduse n tabel trebuie s corespund cerinelor enunate mai sus. Crearea structurii tabelului CREATE TABLE Materiale (cod_material NUMBER(10), cod_furnizor NUMBER(10), nume_material VARCHAR(50) , pret NUMBER(8,2), cantitate NUMBER(5)) Inserarea datelor in tabel INSERT INTO Materiale VALUES (1,1,'Ciment sac 50 kg',20,100) INSERT INTO Materiale VALUES (2,1,'Var sac 50 kg',10,200) INSERT INTO Materiale VALUES (3,2,'Cuie 1kg',15,150) INSERT INTO Materiale VALUES (1,1,'Ciment sac 50 kg',20,400) INSERT INTO Materiale VALUES (2,1,'Var sac 50 kg',10,400) INSERT INTO Materiale VALUES (4,3,'Parchet laminat',40,50) INSERT INTO Materiale VALUES (4,3,'Parchet laminat cires',45,100) INSERT INTO Materiale VALUES (5,3,'Faianta mp',25,200) Cerina a) SELECT * FROM MATERIALE WHERE cod_material=:x ORDER BY pret desc Cerina b) SELECT SUM(PRET)"Suma preturi" FROM MATERIALE WHERE cod_furnizor=:x

Subiectul nr.5
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9; pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine: a)S se afieze numrul atelierelor din tabel. b)S se afieze numrul de piese produse de fiecare atelier. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) SELECT COUNT(DISTINCT cod_atelier) "Numar de ateliere" FROM Muncitori Cerina b) SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse" FROM Muncitori GROUP BY cod_atelier

Subiectul nr.6
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9; pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine: a)S se afieze codul atelierului din tabel cu cei mai muli muncitori. b)S se afieze codul atelierului n care numrul de piese produse este mai mare dect o valoare introdus de la tastatur. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) SELECT cod_atelier, COUNT(*) "Numar maxim de muncitori" FROM Muncitori GROUP BY cod_atelier HAVING COUNT(*)=(SELECT MAX(COUNT(*)) FROM Muncitori GROUP BY Cod_atelier) Cerina b) SELECT cod_atelier, SUM(numar_piese_produse) "Piese produse de atelier" FROM Muncitori GROUP BY cod_atelier HAVING SUM(numar_piese_produse)>:x

Subiectul nr.7
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier, Numr_piese_produse i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine a)Se terg articolele pentru care producia unui muncitor este mai mic dect o valoare introdus de la tastatur.S se afieze numele acestora i codurile atelierelor din care fceau parte. b)S se afieze numrul atelierelor ce au rmas cu cel mult doi muncitori n urma tergerii articolelor de la cerina a). Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200)

INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) Pentru afiarea muncitorilor cu producie mai mic dect x SELECT nume_muncitor, cod_atelier FROM Muncitori WHERE numar_piese_produse<:x Pentru tergerea acestora DELETE FROM Muncitori WHERE numar_piese_produse<:x Cerina b) SELECT COUNT(*) "Nr. ateliere cu maximum 2 ang." FROM Muncitori WHERE cod_atelier IN ( SELECT cod_atelier FROM Muncitori GROUP BY cod_atelier HAVING COUNT(*)<=2)

Subiectul nr.8
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, Salariu i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ). Cerine a)Toi muncitorii ce au produs un numr de piese mai mare cu cel puin 10 % dect o valoare introdus de la tastatur vor avea salariul majorat cu 10 %. S se afieze salariile acestora (dup mrirea salariilor) i codul atelierelor din care fceau parte. b) S se afieze suma total necesar mririi salariilor de la cerina a) i codul atelierului cu cei mai muli muncitori cu salarii mrite. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), salariu NUMBER(6,2)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100,1200) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 1000) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500,1500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,900) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,1300) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,1000) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,1300) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,1400) Cerina a) Modificarea salariilor UPDATE Muncitori SET salariu=salariu*1.10 WHERE numar_piese_produse>1.10*:x Pentru afiarea muncitorilor crora li s-a mrit salariul SELECT nume_muncitor, cod_atelier, salariu FROM Muncitori

WHERE numar_piese_produse>1.10*:x Cerina b) Calculul sumei necesare maririi SELECT SUM(salariu-salariu/1.10) "Suma necesara maririi" FROM Muncitori WHERE numar_piese_produse>1.10*:x Codul atelierului cu cele mai multe salarii mrite SELECT cod_atelier FROM Muncitori WHERE numar_piese_produse>1.10*:x group by cod_atelier having count(*)= ( SELECT max(count(*)) FROM Muncitori WHERE numar_piese_produse>1.10*:x group by cod_atelier)

Subiectul nr.9
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, Vrst i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine a).Pentru a putea lucra n strintate, un muncitor trebuie s aib o vrst cel mult egal cu o valoare introdus de la tastatur i s produc un numr de piese cel puin egal cu o valoare introdus de la tastatur.S se afieze numele celor ce ndeplinesc ambele condiii i atelierele n care lucreaz acetia. b) S se afieze numrul mediu de piese produse de toi cei selectai la prima cerin. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), varsta NUMBER(2)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100,30) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 45) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500,35) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,42) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,55) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,80) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,33) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,49) Cerina a) SELECT * FROM Muncitori WHERE varsta<=:varsta and numar_piese_produse>=:nr_piese Cerina b) SELECT AVG(numar_piese_produse) "Numar mediu piese" FROM Muncitori WHERE varsta<=:varsta and numar_piese_produse>=:nr_piese

Subiectul nr.10
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, Numr copii minori i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine a)S se afieze o list cu muncitorii din fiecare atelier (codul atelierului i apoi toi muncitorii din acel atelier i la fel pentru fiecare atelier). b)S se afieze numrul tuturor copiilor minori ai tutror muncitorilor din tabel. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5), numar_copii_minori NUMBER(2)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100,1) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200, 2) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500,0) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400,0) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150,2) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200,1) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400,3) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300,1) Cerina a) SELECT cod_atelier, nume_muncitor FROM Muncitori ORDER BY cod_atelier, nume_muncitor Cerina b) SELECT SUM(numar_copii_minori) "Numar total copii minori" FROM Muncitori

Subiectul nr.11
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine a)S se afieze numrul mediu de piese produse de un muncitor (numr total de piese / numr muncitori). b)S se afieze numrul mediu de piese produse de un atelier )numr total piese / numr ateliere) Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300)

Cerina a) SELECT AVG(numar_piese_produse) "Numar mediu piese " FROM Muncitori Cerina b) SELECT SUM(numar_piese_produse)/COUNT(DISTINCT cod_atelier) "Numar mediu piese/atelier" FROM Muncitori

Subiectul nr.12
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine: a) S se tearg articolele referitoare la muncitorii ce produc un numr de piese mai mic dect un numr introdus de la tastatur i s se depun ntr-o tabel nou (cu structura Nume_muncitor, , Numr_piese), apoi s se sorteze alfabetic noua tabel dup cmpul Nume_ muncitor i s se afieze sortat. b) S se afieze tabela iniial, dup transferul precizat la cerina a ). Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabelul iniial INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) Crearea structurii tabelului Muncitori2 n care se vor copia muncitorii ce au realizat un numr de piese mai mic dect o valoare introdus de la tastatur. CREATE TABLE Muncitori2 (nume_muncitor VARCHAR(50) UNIQUE, numar_piese_produse NUMBER(5)) Copierea muncitorilor n al doilea tabel INSERT INTO Muncitori2 SELECT nume_muncitor, numar_piese_produse FROM Muncitori WHERE numar_piese_produse<:X tergerea nregistrrilor copiate din tabelul iniial DELETE FROM Muncitori WHERE numar_piese_produse<:X Afiarea muncitorilor din tabela nou creat sortat dup numele muncitorului SELECT * FROM Muncitori2 ORDER BY nume_muncitor Cerina b) SELECT * FROM Muncitori

Subiectul nr.13
S se creeze o tabel cu structura:Nume_muncitor, Cod_atelier, Numr_piese_produse, i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine: a) Se citete de la tastatur un cod de atelier existent n tabel.n acel atelier se angajeaz un muncitor nou pentru care se introduc date de la tastatur. Cmpul Numr_ piese se va completa cu valoarea 0. S se afieze apoi numrul minim necesar de piese pe care noul venit trebuie s le produc astfel nct producia medie a acelui atelier s nu scad. b) Se citete de la tastatur un nume de muncitor i un cod de atelier. Dac muncitorul figureaz n acel atelier din tabel, atunci s i se schimbe codul atelierului su cu un alt cod introdus (existent n tabel ) de la tastatur (se mut de la un atelier la altul). Dac acel muncitor nu figureaz n atelierul dat , atunci se va afisa un mesaj. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5)) Inserarea datelor in tabel INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) Adugarea muncitorului INSERT INTO Muncitori VALUES (:nume, :atelier, 0) Calculul valorii minime a numrului de piese SELECT CEIL(AVG(numar_piese_produse)) FROM Muncitori WHERE cod_atelier=: atelier AND numar_piese_produse>0 Cerina b) UPDATE Muncitori SET cod_atelier=:atelier_nou WHERE (UPPER(nume_muncitor)=UPPER(:nume)) AND (cod_atelier=:atelier)

Subiectul nr.14
S se creeze o tabel cu structura: Nume_muncitor, Cod_atelier,Numr_piese_produse, i s se introduc 8 articole (un articol un muncitor, codul unui atelier este un numr de la 1 la 9 pot fi i mai muli muncitori ntr-un atelier i toi au nume diferite ).Cerine: a) Muncitorul /muncitorii cu numr maxim de piese produse se va / vor transfera la alt loc de munc.S se afieze in ordine alfabetic numele celor transferai. b) S se afieze numrul mediu de piese produse de ctre cei rmai n vechile ateliere. Crearea structurii tabelului CREATE TABLE Muncitori (nume_muncitor VARCHAR(50) UNIQUE, cod_atelier NUMBER(1) CHECK (cod_atelier>=1 AND cod_atelier<=9), numar_piese_produse NUMBER(5))

Inserarea datelor in tabelul iniial INSERT INTO Muncitori VALUES ('Popa Ion',1,100) INSERT INTO Muncitori VALUES ('Popa Mihai',1,200) INSERT INTO Muncitori VALUES (Deaconu Dorel',2,500) INSERT INTO Muncitori VALUES ('Popescu Vlad',3,400) INSERT INTO Muncitori VALUES ('Popescu Victor',2,150) INSERT INTO Muncitori VALUES ('Enache Vasile',4,200) INSERT INTO Muncitori VALUES ('Albu Andrei',2,400) INSERT INTO Muncitori VALUES ('Banu Gheorghe',2,300) Cerina a) Mutarea la un alt loc de munc a muncitorilor cu numr maxim de piese e realizat prin completarea cu NULL a valorilor din coloana COD_ATELIER corespunztoare acestora. UPDATE Muncitori SET cod_atelier=NULL WHERE numar_piese_produse=(SELECT MAX(numar_piese_produse) FROM Muncitori) Cerina b) SELECT AVG(numar_piese_produse) "Nr. mediu piese pt.cei ramasi" FROM Muncitori WHERE cod_atelier IS NOT NULL

Subiectul nr.15
S se creeze o tabel cu structura : Cod_material, Pret_unitar, Cantitate, Stoc_necesar i s se introduc 8 articole (un articol - un produs dintr-un depozit;cantitate existentul din depozit; stoc_necesar = cantitatea minima ncesara in depozit; valoarea unui produs = cantitatea * pret unitar).Cerinte: a) S se afizeze codurile produselor pentru care cantitatea existent este mai mic dect stocul necesar . Pentru fiecare dintre aceste produse se va afia ce cantitate trebuie adaugat pentru a realiza o cantitate egal cu acel stoc_necesar. b) S se afieze codurile produselor ce au cantitate mai mare cu cel puin 20 % dect stoc_ necesar, n ordinea codurilor. Crearea structurii tabelului CREATE TABLE Stoc ( cod_material NUMBER(10) PRIMARY KEY, pret_unitar NUMBER(10,2), cantitate NUMBER(10), stoc_necesar NUMBER(10)) Inserarea datelor in tabel INSERT INTO Stoc VALUES (1, 10.5, 200, 500) INSERT INTO Stoc VALUES (2, 18, 1000, 300) INSERT INTO Stoc VALUES (3, 25.9, 600, 1000) INSERT INTO Stoc VALUES (4, 80, 1500, 500) INSERT INTO Stoc VALUES (5, 36.5, 250, 600) INSERT INTO Stoc VALUES (6, 12.5, 50, 10) INSERT INTO Stoc VALUES (7, 100, 25, 22) INSERT INTO Stoc VALUES (8, 100, 130, 135) Cerina a) SELECT cod_material, cantitate, stoc_necesar, stoc_necesar-cantitate "De aprovizionat" FROM Stoc WHERE cantitate<stoc_necesar Cerina b) SELECT * FROM Stoc

WHERE cantitate>=1.20*stoc_necesar ORDER BY cod_material

Subiectul nr.16
S se creeze o tabel cu structura Cod materia, Pret unitar, Cantitate, Stoc necesar si s se introduc 8 articole (un articol- un produs dintr-un depozit, cantitate= existentul depozit , valoarea unui produs = cantitatea *pre-unitar ). Cerine: a)Se citesc de la tastatur un cod de material i o cantitate . Dac acel produs este n tabel i dac se poate livra (cantitatea din depozit este cel puin egal cu cea citit), atunci s se afieze cantitatea rmas n depozit pentru livrare. Dac acea cantitate rmas n depozit este mai mic dect stocul necesar, se va afia un mesaj. Dac nu exist acel produs sau nu e n cantitatea dorit, se va afia un alt mesaj. b)Se introduc de la tastatur un cod de material ( c) i o cantitate (k) .Dac acel cod corespunde unui produs existent , atunci se va mri pentru el cantitatea existent n depozit cu valoarea k. Dac nu exist, atunci se va aduga un nou articol avand cmpurile pre_unitar i stoc _necesar introduse de la tastatur.

Crearea structurii tabelului CREATE TABLE Stoc ( cod_material NUMBER(10) PRIMARY KEY, pret_unitar NUMBER(10,2), cantitate NUMBER(10), stoc_necesar NUMBER(10)) Inserarea datelor in tabel INSERT INTO Stoc VALUES (1, 10.5, 200, 500) INSERT INTO Stoc VALUES (2, 18, 1000, 300) INSERT INTO Stoc VALUES (3, 25.9, 600, 1000) INSERT INTO Stoc VALUES (4, 80, 1500, 500) INSERT INTO Stoc VALUES (5, 36.5, 250, 600) INSERT INTO Stoc VALUES (6, 12.5, 50, 10) INSERT INTO Stoc VALUES (7, 100, 25, 22) INSERT INTO Stoc VALUES (8, 100, 130, 135) Not! Deoarece rezolvarea cerinelor folosind Oracle ar necesita cunotine de PL/SQL, limbaj ce nu este inclus n programa de la neintensiv, se vor scrie comenzi SQL ce sunt aproximativ echivalente. Cerina a) SELECT cod_material, cantitate "Cantitate initiala", DECODE(SIGN(cantitate-:cantitate_livrata),1, 'Se poate livra', -1,'Nu se poate livra') "Stare livrare", DECODE(SIGN(cantitate-:cantitate_livrata),1, cantitate-:cantitate_livrata, -1,cantitate) "Cantitate ramasa", DECODE(SIGN(cantitate-:cantitate_livrata-stoc_necesar), -1, 'Necesita aprovizionare' , 1,'Stoc suficient') "Situatie stoc in urma livrarii", stoc_necesar FROM Stoc where cod_material=:cod_mat Cerina b) Modificarea stocului pentru materialul citit UPDATE Stoc SET CANTITATE=CANTITATE+:cant_adaugata where cod_material=:cod_mat Afiarea materialului cruia i s-a modificat stocul

SELECT * FROM Stoc WHERE cod_material=:cod_mat Dac interogarea anterioar nu afieaz nici un material, se va scrie comanda de mai jos pentru adugarea materialului dorit n tabela Stoc. INSERT INTO Stoc VALUES (:cod_mat, :pret, :cantitate,:stoc_necesar)

Subiectul nr.17
S se creeze o tabel cu structura: Nume _autor, Titlu, Nr_Exemplare_imprumutate, Data_imprumut i s se introduc cel puin 8 articole. Cerinte a) S se afieze numele autorului cu cele mai multe titluri. b) S se afieze numele autorului cu cele mai puine cari solicitate pentru mprumut n luna curent. Crearea structurii tabelului CREATE TABLE CARTI (nume_autor VARCHAR2(50), titlu VARCHAR(100), nr_exemplare_imprumutate NUMBER(3), data_imprumut DATE) Inserarea datelor in tabel INSERT INTO CARTI VALUES ('Marin Preda', 'Viata ca o prada', 2,'21.04.2010') INSERT INTO CARTI VALUES ('Marin Preda', 'Morometii vol. I', 1,'20.02.2010') INSERT INTO CARTI VALUES ('Marin Preda', 'Morometii vol. II', 5,'02.05.2010') INSERT INTO CARTI VALUES ('I.L. Caragiale', 'O noapte furtunoasa', 1,'02.04.2010') INSERT INTO CARTI VALUES ('I.L. Caragiale', 'D-ale carnavalului', 2,'10.05.2010') INSERT INTO CARTI VALUES ('Mihai Eminescu', 'Poezii', 6,'12.05.2010') INSERT INTO CARTI VALUES ('Nichita Stanescu', 'Sensul iubirii', 2,'12.04.2010') INSERT INTO CARTI VALUES ('Nichita Stanescu', 'In dulcele stic clasic', 1,'01.05.2010') Cerina a) SELECT nume_autor,count(DISTINCT titlu) "Numar volume" FROM CARTI GROUP BY nume_autor HAVING COUNT(*)= (SELECT MAX(COUNT(DISTINCT titlu)) FROM CARTI GROUP BY nume_autor ) Cerina b) SELECT nume_autor,SUM(nr_exemplare_imprumutate) "Numar minim pt luna curenta" FROM CARTI WHERE MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),DATA_IMPRUMUT)<1 GROUP BY nume_autor HAVING SUM(nr_exemplare_imprumutate) = (SELECT MIN(SUM(nr_exemplare_imprumutate)) FROM CARTI GROUP BY nume_autor )

Subiectul nr.18
S se creeze o tabel cu structura: Nume_angajat, Salariu, Numar _copii_minori, Numar_zile_ concediu_medical i s se introduc cel puin 8 articole. Un articol reprezint un angajat din ntreprindere.Cerine: a).S se afieze numele angajatului cu cele mai multe zile de concediu medical. b).S se afieze salariul mediu al celor ce au avut concediu medical i care au cel puin un copil minor.

Crearea structurii tabelului CREATE TABLE ANG_CONCEDII (nume_angajat VARCHAR2(50), salariu NUMBER(6,2), numar_copii_minori NUMBER(1), numar_zile_concediu_medical NUMBER(3)) Inserarea datelor in tabel INSERT INTO ANG_CONCEDII VALUES ('Popescu Darius', 1500, 2,0) INSERT INTO ANG_CONCEDII VALUES ('Bujor Adelina', 1200, 0,15) INSERT INTO ANG_CONCEDII VALUES ('Dinca Alexandru', 800, 1,30) INSERT INTO ANG_CONCEDII VALUES ('Eftimie Florin', 750, 2,10) INSERT INTO ANG_CONCEDII VALUES ('Dumitrescu Ion', 853, 0,25) INSERT INTO ANG_CONCEDII VALUES ('Tudor Vasile', 1254, 2,0) INSERT INTO ANG_CONCEDII VALUES ('Albu Diana', 987, 1,45) INSERT INTO ANG_CONCEDII VALUES ('Dumitrascu Viorel', 1350, 2,28) Cerina a) SELECT nume_angajat, numar_zile_concediu_medical FROM ang_concedii WHERE numar_zile_concediu_medical= (SELECT MAX(numar_zile_concediu_medical)FROM ang_concedii) Cerina b) SELECT AVG(salariu) "Salariu mediu" FROM ang_concedii WHERE numar_zile_concediu_medical>0 AND numar_copii_minori>=1

Subiectul nr.19
S se creeze o tabel cu structura: Nume_medic, Nume _pacient, Diagnostic, Data_consultului i s se introduc cel puin 8 articole. Un articol reprezint un pacient dintr-o policlinic (un consult - un articol). Cerine a) S se afieze numrul pacienilor consultai n luna curent de ctre un medic al crui nume se introduce de la tastatur. b) S se afieze diagnosticul cel mai frecvent pus n luna curent. Crearea structurii tabelului CREATE TABLE consultatii(nume_medic VARCHAR2(50), nume_pacient VARCHAR2(50), diagnostic VARCHAR2(50), data_consultului DATE) Inserarea datelor in tabelul iniial INSERT INTO consultatii VALUES ('Popescu Darius', 'Ionescu Vasile', 'Bronsita','21-05-2010') INSERT INTO consultatii VALUES ('Popescu Darius', 'Dragnea Relu', 'Insuficienta respiratorie','01-052010') INSERT INTO consultatii VALUES ('Dobre Andra', 'Voinea Alina', 'Bronsita','01-04-2010') INSERT INTO consultatii VALUES ('Dobre Andra', 'Hundrea Calin', 'Pneumonie','22-04-2010') INSERT INTO consultatii VALUES ('Dobre Andra', 'Bunescu Sorana', 'Insuficienta cardiaca','12-03-2010') INSERT INTO consultatii VALUES ('Vladulescu Daniel', 'Gheorghe Cristina', 'Insuficienta cardiaca','01-052010') INSERT INTO consultatii VALUES ('Dobre Andra', 'Bujor George', 'Insuficienta cardiaca','14-05-2010') INSERT INTO consultatii VALUES ('Vladulescu Daniel', 'Popescu Mihaela', 'Reumatism acut','10-052010') Cerina a) SELECT COUNT(*) FROM consultatii

WHERE UPPER(nume_medic)=UPPER(:medic) AND ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1 Cerina b) SELECT diagnostic FROM consultatii WHERE ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1 GROUP BY diagnostic HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM consultatii WHERE ABS(MONTHS_BETWEEN(LAST_DAY(CURRENT_DATE),LAST_DAY(data_consultului)))<1 GROUP BY diagnostic)

Subiectul nr.20
S se creeze o tabel cu structura: Nume _elev, Clasa, Promovat, n care s se introduc cel puin 8 articole. Un articol reprezint un elev dintr-o clas a unei coli. Cerinte a)S se afieze clasa cu cel mai mare procent de promovabilitate. b)S se afieze numele elevilor nepromovai dintr-o clas introdus de la tastatur. Crearea structurii tabelului CREATE TABLE elevi (nume_elev VARCHAR2(50), clasa VARCHAR2(10), promovat NUMBER(1)) Inserarea datelor in tabelul iniial INSERT INTO elevi VALUES('Popa Daniel','12A',1) INSERT INTO elevi VALUES('Popa Maria','12B',1) INSERT INTO elevi VALUES('Deaconu Ion','12A',0) INSERT INTO elevi VALUES('Deaconu Ana','12C',1) INSERT INTO elevi VALUES('Vlad Mihai','12B',0) INSERT INTO elevi VALUES('Croitoru Andrei','12A',0) INSERT INTO elevi VALUES('Jianu Dan','12C',1) INSERT INTO elevi VALUES('Jianu Angela','12B',1) Cerina a) SELECT clasa, AVG(promovat) "Procent maxim de promovare" FROM elevi GROUP BY clasa HAVING AVG(promovat)=(SELECT MAX(AVG(promovat)) FROM elevi GROUP BY clasa) Cerina b) SELECT * FROM elevi WHERE UPPER(clasa)=UPPER(:Clasa) and promovat=0 ORDER BY nume_elev

Subiectul nr.21
S se creeze o tabel cu urmtoarea structur : Cod_aliment, Den_aliment, Calorii, n care s sec introduc minimum 8 articole . Cerine a) S se adauge la sfritul tabelei 3 nregistrri noi. b) S se afieze o list avnd cmpurile : den_aliment,calorii in ordinea descrescatoare a caloriilor. Crearea structurii tabelului

CREATE TABLE alimente (cod_aliment NUMBER(10) PRIMARY KEY, den_aliment VARCHAR2(50), calorii NUMBER(5)) Inserarea datelor in tabelul iniial INSERT INTO alimente VALUES(1,'Oua',100) INSERT INTO alimente VALUES(2,'Branza FETA',300) INSERT INTO alimente VALUES(3,'Branza degresata',50) INSERT INTO alimente VALUES(4,'Lapte 100 ml',80) INSERT INTO alimente VALUES(5,'Carne porc 100 g',500) INSERT INTO alimente VALUES(6,'Carne vita 100 g',400) INSERT INTO alimente VALUES(7,'File pangasius 100 g',150) INSERT INTO alimente VALUES(8,'File crap 100 g',180) Cerina a) INSERT INTO alimente VALUES(9,'Pastrav 100 g',120) INSERT INTO alimente VALUES(10,'Unt 100 g',460) INSERT INTO alimente VALUES(11,'Paste 100 g',230) Cerina b) SELECT den_aliment, calorii FROM alimente ORDER BY calorii DESC

Subiectul nr.22 S se creeze , la nivel de ntreprindere , o tabel cu urmtoarea structur : Nume, Cod_ pers, Adresa, Salariu, n care s se introduc minimum 8 articole. Cerine
a) S se modifice adresa angajatului al crui nume a fost introdus de la tastatur. b) S se afieze salariu mediu pe ntreprindere. Crearea structurii tabelului CREATE TABLE ANGAJATI2 (nume VARCHAR2(50), cod_pers NUMBER(10) PRIMARY KEY, adresa VARCHAR2(150), salariu NUMBER(8,2)) Inserarea datelor in tabelul iniial INSERT INTO angajati2 VALUES('Dumitrescu Ionel',1, 'Strada Mihail Eminescu nr. 2',1200) INSERT INTO angajati2 VALUES('Popescu Dorel',2, 'Strada Mihail Eminescu nr. 25',1450) INSERT INTO angajati2 VALUES('Croitoru Madalina',3, 'Strada Nicolae Iorga nr. 4',890) INSERT INTO angajati2 VALUES('Ancutoiu Robert',4, 'Strada Calea lui Traian nr. 10',1500) INSERT INTO angajati2 VALUES('Andreescu Andrada',5, 'Strada Calea lui Traian nr. 2',1333) INSERT INTO angajati2 VALUES('Branescu Mihaela',6, 'Strada Aleea Teilor nr. 1',1458) INSERT INTO angajati2 VALUES('Voinea Mihai',7, 'Blv. Dem Radulescu nr. 4',2500) INSERT INTO angajati2 VALUES('Jianu Madalin',8, 'Blv. Carol nr. 2',1700) Cerina a) UPDATE angajati SET adresa=:Adresa_noua WHERE UPPER(nume)=UPPER(:Nume_angajat) Cerina b) SELECT AVG(salariu) FROM angajati

Subiectul nr.23
S se creezeo tabel cu rezultatele sportivilor participanti la Campionatul European de Fotbal n care s se introduc minimum 8 articole. Structura tabelei este urmtoarea :Nume _sportiv, Tara, Goluri _ marcate. Cerine: a) S se afieze numrul trilor participante. b) S se afieze numele sportivilor, numrul de goluri marcate ale unei tri introduse de la tastatur Crearea structurii tabelului CREATE TABLE sportivi (nume_sportiv VARCHAR2(50), tara VARCHAR2(30), goluri_marcate NUMBER(2)) Inserarea datelor in tabelul iniial INSERT INTO sportivi VALUES('Ruud van Nistelrooy','Olanda', 4) INSERT INTO sportivi VALUES('Milan Baros','Cehia', 5) INSERT INTO sportivi VALUES('Wayne Rooney','Anglia', 4) INSERT INTO sportivi VALUES('Frank Lampard','Anglia', 3) INSERT INTO sportivi VALUES('Zinedine Zidane','Franta', 3) INSERT INTO sportivi VALUES('Cristiano Ronaldo','Portugalia', 2) INSERT INTO sportivi VALUES('Thierry Henry','Franta', 2) INSERT INTO sportivi VALUES('Henrik Larsson','Suedia', 2) Cerina a) SELECT COUNT(DISTINCT tara) "Numar tari participante" FROM sportivi Cerina b) SELECT nume_sportiv, goluri_marcate FROM sportivi WHERE UPPER(tara)=UPPER(:Tara)

Subiectul nr.24
Un depozit aprovizioneaz cu produse mai multe magazine. S se creeze o tabel cu urmtoarea structur: Cod_produs, Data_ livrare, Pret_ unitar, Cantitate, Unitate_masura, Cod_magazin, n care s se introduc minimum 8 articole. Cerine: a)Pentru o data livrare Y (introdus de la tastatur) s se afieze toate codurile magazinelor i produsele cu care au fost aprovizionate. b) S se determine produsul cel mai solicitat n data_livrare X (introdus de la tastatur) i s se afieze valoarea total obinut prin vnzarea lui. Crearea structurii tabelului CREATE TABLE livrari (cod_produs NUMBER(10), data_livrare DATE, pret_unitar NUMBER(6,2), cantitate NUMBER(5), unitate_masura VARCHAR2(30), cod_magazin NUMBER(10)) Inserarea datelor in tabelul iniial INSERT INTO livrari VALUES(1,'21-04-2010',7.50, 100, 'kg', 2) INSERT INTO livrari VALUES(1,'21-04-2010',7.50, 300, 'kg', 1) INSERT INTO livrari VALUES(2,'01-05-2010',5.70, 100, 'litru', 4) INSERT INTO livrari VALUES(2,'01-05-2010',5.70, 300, 'litru', 3) INSERT INTO livrari VALUES(2,'21-04-2010',5.70, 150, 'litru', 1) INSERT INTO livrari VALUES(3,'10-05-2010',60, 80, 'sac', 3) INSERT INTO livrari VALUES(3,'10-05-2010',60, 50, 'sac', 1) INSERT INTO livrari VALUES(4,'15-03-2010',2.50, 100, 'litru', 3) Cerina a)

SELECT cod_magazin, cod_produs FROM livrari WHERE data_livrare=:Data_livrarii ORDER BY 1,2 Cerina b) SELECT cod_produs, COUNT(*)"Numar solicitari", SUM(pret_unitar*cantitate) "Valoarea incasata" FROM livrari WHERE data_livrare=:Data_livrarii GROUP BY cod_produs HAVING COUNT(*)= (SELECT MAX(COUNT(*))FROM livrari WHERE data_livrare=:Data_livrarii GROUP BY cod_produs)

Subiectul nr.25 Un magazin se aprovizioneaz cu produse de la mai multe depozite. Creai tabela cu urmtoarea structur:Cod_ produs, Cantitate,Pret_unitar, Unitate_masura, Cod_depozit, Data_aprovizionare, n care s introducei minimum 8 articole .Cerine:
a) Pentru un produs dat, afiai cantitatea cu care s-a aprovizionat magazinul n luna X (introdus de la tastatur). b) Afiai valoarea total a mrfurilor transferate de la un depozit cu codul Z (introdus de la tastatur) Crearea structurii tabelului CREATE TABLE aprovizionare (cod_produs NUMBER(10), cantitate NUMBER(5), pret_unitar NUMBER(6,2), unitate_masura VARCHAR2(30), cod_depozit NUMBER(10), data_aprovizionare DATE) Inserarea datelor in tabelul iniial INSERT INTO aprovizionare VALUES(1,50,7.50,'kg',100,'21-04-2010') INSERT INTO aprovizionare VALUES(1,150,7.50,'kg',200,'22-04-2010') INSERT INTO aprovizionare VALUES(2,400,5.50,'litru',200,'25-04-2010') INSERT INTO aprovizionare VALUES(3,800,4.50,'sac',200,'01-05-2010') INSERT INTO aprovizionare VALUES(4,1200,15.50,'sac',300,'01-04-2010') INSERT INTO aprovizionare VALUES(5,800,21,'litru',300,'23-04-2010') INSERT INTO aprovizionare VALUES(4,200,8.5,'litru',200,'05-05-2010') INSERT INTO aprovizionare VALUES(3,600,14.5,'litru',300,'15-05-2010') Cerina a) SELECT SUM(cantitate) "Cantitatea aprovizionata" FROM aprovizionare WHERE cod_produs=:Codul_produsului AND to_number(to_char(data_aprovizionare,'mm'))=:Luna Cerina b) SELECT SUM(cantitate*pret_unitar) "Valoarea marfurilor" FROM aprovizionare WHERE cod_depozit=:Codul_depozitului

Not
Dei rezolvrile au fost implementate efectiv n Oracle, iar comenzile scrise par a returna rezultatele ateptate, este posibil ca, datorit volumului mare de munc depus i timpului limitat avut

la dispoziie, s se fi strecurat erori de sintax sau chiar erori logice. Rog colegii s-mi sesizeze aceste erori pentru a fi corectate i pentru a putea republica documentul ntr-o form mai bun. Prof. Ochia Florin, Grup colar Ferdinand I Email : ochiaflorin@yahoo.com