Documente Academic
Documente Profesional
Documente Cultură
CLEAR SCREEN
PROMPT CREARE TABELA SITUATIE
DROP TABLE Situatie;
CREATE TABLE Situatie
( DenC Varchar2 (30),
TotalCom Number (3),
TotalVal Number (12) );
DESCRIBE Situatie;
1
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
2
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
INSERAREA DATELOR
PROMPT INTRODUCERE DATE ÎN TABELA CLIENŢI
DELETE FROM Clienti;
INSERT INTO Clienti VALUES(1,'Client 1', 'Bucuresti');
INSERT INTO Clienti VALUES(2,'Client 2', 'Bucuresti');
INSERT INTO Clienti VALUES(3,'Client 3', 'Timisoara');
INSERT INTO Clienti VALUES(4,'Client 4','Cluj');
INSERT INTO Clienti VALUES(5,'Client 5','Brasov');
INSERT INTO Clienti VALUES(6,'Client 6','Iasi');
3
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
4
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
5
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
3. DEFINIREA CURSOARELOR
Pentru o localitate introdusă de la tastatură, se vor selecta numele
clienţilor din localitatea respectivă. Rezultatul acestei proiecţii se va stoca
în câmpul „Nume” dintr-o tabelă „Mesaje” nou creată.
DROP TABLE Mesaje;
CREATE TABLE Mesaje (Nume Varchar2 (30) );
SELECT * FROM Clienti;
ACCEPT Loc PROMPT 'Introduceti localitatea din care se va selecta clientul:'
6
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
DECLARE
Nume Clienti.DenC%TYPE;
CURSOR c1 (Localitate varchar2) IS
SELECT DenC FROM Clienti WHERE Loc = Localitate;
BEGIN
OPEN c1 ('&Loc');
LOOP
FETCH c1 INTO Nume;
EXIT WHEN c1%NOTFOUND;
INSERT INTO Mesaje VALUES(Nume);
END LOOP;
CLOSE c1;
END;
/
SELECT * FROM Mesaje;
7
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
DECLARE
CURSOR c1 IS SELECT * FROM Restante;
BEGIN
FOR i IN c1
LOOP
IF i.SumaPlatita=i.TotalSuma THEN
INSERT INTO SitPlati VALUES (i.CodClient, 'Achitat',0,0);
END IF;
IF i.SumaPlatita<i.TotalSuma THEN
INSERT INTO SitPlati VALUES
(i.CodClient, 'dator', 0, i.TotalSuma-i.SumaPlatita);
END IF;
IF i.SumaPlatita>i.TotalSuma THEN
INSERT INTO SitPlati VALUES
( i.CodClient, 'Debitor', i.SumaPlatita-i.TotalSuma,0);
END IF;
END LOOP;
END;
/
SELECT * FROM Restante;
SELECT * FROM SitPlati;
8
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
9
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
END LOOP;
END;
/
SELECT * FROM Temp ORDER BY Procent;
10
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
IF ZiAng>15 THEN
SELECT NEXT_DAY (LAST_DAY( ADD_MONTHS (SYSDATE,1) )-7,
'Friday') INTO DataPlataLuna FROM DUAL;
END IF;
UPDATE Cadre SET DataPlata=DataPlataLuna
WHERE Nume=i.Nume;
END LOOP;
END;
/
SELECT * FROM Cadre ORDER BY DataAng;
Observaţie:
Funcţia LAST_DAY(DATA, 'NumeZi) selectează ultima zi din lună,
identificată prin „NumeZi”.
Funcţia ADD_MONTHS (DATA, Nr_Luni) adaugă la „Data” un anumit
număr de luni.
Funcţia NEXT_DAY(LAST_DAY(SYSDATE)-7,'Friday’) afişează ultima zi
de Vineri din luna curentă.
Funcţia NEXT_DAY (LAST_DAY (ADD_MONTHS (SYSDATE,1))-7,
'Friday’) afişeaza ultima zi de Vineri din luna următoare, faţă de data curentă.
11
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
12
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
IF TotalSuma>&LimitaBuget THEN
RAISE_APPLICATION_ERROR (-20001, 'Eroare -
salarii foarte mari, nu se mai face nici o indexare');
EXIT;
END IF;
END LOOP;
END;
/
SELECT Nume,
Sal_Init AS "SALARIU_INITIAL",
Sal_Index AS "SALARIU_INDEXAT",
Suma_Index AS "SUMA_INDEXATA"
FROM SituatieSal ORDER BY Nume;
SELECT COUNT(*) "INDEXARI" FROM SituatieSal;
Observaţie:
deoarece este vorba de realizarea unei sume, variabila TotalSumă, declarată de tip
Numeric, se iniţializează cu 0;
o această variabilă stochează suma tuturor salariilor la nivelul unităţii şi
reprezintă un criteriu de condiţionare alături de variabila LimitaBuget;
funcţia: RAlSE_APPLlCATlON_ERROR (-20001, 'Eroare - salarii foarte mari,
nu se mai face nicio indexare') – EXIT:
o permite definirea unei erori explicite de către utilizator în cazul în care
suma salariilor depaşeşte nivelul fixat de variabila LimitaBuget;
13
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
14
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
DECLARE
NNrInreg Number (3);
NSalariu_med Cadre.Salariu %TYPE;
NSalariu_min Cadre.Salariu %TYPE;
NSalariu_max Cadre.Salariu %TYPE;
BEGIN
SELECT COUNT (Nume) INTO NNrInreg FROM Cadre;
SELECT AVG (Salariu) INTO NSalariu_med FROM Cadre;
SELECT MIN (Salariu) INTO NSalariu_min FROM Cadre;
SELECT MAX (Salariu) INTO NSalariu_max FROM Cadre;
INSERT INTO Valori VALUES
(NNrInreg, NSalariu_med, NSalariu_min, NSalariu_max);
END;
/
SELECT * FROM Valori;
15
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
16
Masterat: Dezvoltare Aplicatii cu baze de date Oracle – Anul I, IEM
Aplicatie Curs – Lect.univ.dr. Ionel Iacob
END IF;
END;
/
PROMPT 'Mesaj de atentionare (daca exista):'
SELECT * FROM Mesaj;
PROMPT 'Tabela auto modificata in functie de capacitate:'
SELECT Nrauto, Capacitate FROM Auto where NrAuto='&NNrAuto';
17