Sunteți pe pagina 1din 47

ACADEMIA DE STUDII ECONOMICE BUCUREŞTI

FACULTATEA DE CIBERNETICĂ, STATISTICĂ ŞI INFORMATICĂ ECONOMICĂ

SGBD Oracle
CURSUL 3

BUCUREŞTI
2022-2023

Conf.univ.dr. IULIANA BOTHA (ȘIMONCA)


Agenda

1. Funcțiile SGBD

2. Arhitectura SGBD

3. Clasificarea SGBD

4. Introducere în limbajul PL/SQL

2
Funcțiile SGBD

UTILIZARE

MANIPULARE DESCRIERE ADMINISTRARE

BAZA DE DATE
Funcțiile SGBD.
Funcţia de descriere
❑permite definirea structurii bazei de date cu ajutorul
limbajului de definire a datelor (LDD). Definirea datelor
poate fi realizată la nivel conceptual, logic şi fizic.
❑se descriu atributele, legăturile dintre entităţile bazei de
date sau dintre atributele aceleiaşi entităţi, se definesc
eventualele criterii de validare a datelor, metodele de
acces la date, aspectele referitoare la asigurarea
integrităţii datelor.
❑concretizarea acestei funcţii este schema bazei de date,
memorată în cod intern.

4
Funcțiile SGBD.
Funcţia de manipulare

❑ funcţia de manipulare este cea mai complexă şi realizează


actualizarea şi regăsirea datelor din baza de date, cu
ajutorul limbajului de manipulare a datelor (LMD).

5
Funcțiile SGBD.
Funcţia de manipulare (cont.)
a. încărcarea datelor în baza de date se realizează prin
operaţii automatizate sau programate ce asigură şi
criteriile de validare necesare.
b. actualizarea bazei de date constă în operaţii de adăugare,
modificare şi ştergere de înregistrări. La operaţiile de
adăugare şi de modificare se păstrează aceleaşi criterii de
validare care s-au folosit şi la activitatea de încărcare a
datelor. Actualizarea se realizează numai autorizat, prin
asigurarea unei protecţii corespunzătoare a datelor,
pentru a se păstra coerenţa bazei de date.

6
Funcțiile SGBD.
Funcţia de manipulare (cont.)
c. prelucrarea datelor se realizează prin operaţii de
selecţie, ordonare, interclasare (compunere) şi ventilare
(descompunere) efectuate asupra entităţilor bazei de
date. Acestea sunt, de obicei, operaţii pregătitoare
activităţii de regăsire a datelor. Multe din operaţiile de
prelucrare sunt realizate cu ajutorul operatorilor din
modelul de date pe care îl implementează SGBD.
d. regăsirea (interogarea) datelor constă în operaţii de
vizualizare și raportare.

7
Funcțiile SGBD.
Funcţia de utilizare

❑ funcţia de utilizare asigură mulţimea interfeţelor necesare


pentru comunicarea tuturor utilizatorilor cu baza de date.
❑ pentru a realiza această funcţie, SGBD trebuie să asigure
facilităţi pentru mai multe categorii de utilizatori ai bazei
de date: neinformaicieni, specialişti (informaticieni),
administratori.

8
Funcțiile SGBD.
Funcţia de administrare

❑ funcţia de administrare este complexă şi ține și de


competenţa administratorului bazei de date:
✓ organizarea bazei de date conform modelului de
date;
✓ managementul drepturilor de acces;
✓ organizarea spațiului bazei de date;
✓ protecția bazei de date.

9
Arhitectura SGBD
Arhitectura pe componente (niveluri) a unui SGBD
SGBD
INTERFEȚE
DE DEZVOLTARE

NUCLEU
BAZA DE DATE

INSTRUMENTE
DE ÎNTREŢINERE

10
Arhitectura SGBD (cont.)
INTERFEȚE

NUCLEU BAZA DE DATE

INSTRUMENTE

➢ nucleul (motorul) conţine limbajul de descriere a datelor


(LDD), limbajul de manipulare a datelor (LMD), componente
obligatorii în kit-ul minim de SGBD;

➢ componenta este destinată analiştilor, programatorilor şi


administratorilor BD.

11
Arhitectura SGBD (cont.)
INTERFEȚE

NUCLEU BAZA DE DATE

INSTRUMENTE

➢ interfeţele sunt formate din: generatoarele de diferite tipuri (de


meniuri, de videoformate, de rapoarte etc.), elementele de
CASE (Computer Aided Software Engineering), interfeţe cu
limbaje de programare universale, interfeţe cu alte sisteme etc.
➢ componenta este destinată tuturor categoriilor de utilizatori:
finali, intensivi, specialişti.
12
Arhitectura SGBD (cont.)
INTERFEȚE

NUCLEU BAZA DE DATE

INSTRUMENTE

➢ instrumentele sunt formate din: editoarele, navigatoarele


(browsers), utilitarele (shells) de diferite tipuri.

➢ componenta este destinată, în principal, administratorului


bazei de date, dar şi altor categorii de utilizatori.

13
Clasificarea SGBD
1. După limbajul de programare utilizat:
➢ SGBD cu limbaj gazdă: este cel care are un limbaj de
manipulare a datelor bazat pe unul de nivel înalt
(universal);
➢ SGBD cu limbaj propriu (autonom): este cel care are
un limbaj de manipulare a datelor specific.

14
Clasificarea SGBD (cont.)
2. După modelul logic de date implementat:
➢ SGBD ierarhice - exemplu: IMS;
➢ SGBD reţea - exemplu: IDMS;
➢ SGBD relaţionale - exemple: Oracle, MS SQL Server,
MySQL, FoxPro, Paradox, Access, Informix, DB2;
➢ SGBD orientate obiect - exemple: O2, Orion,
Jasmine.

15
Clasificarea SGBD (cont.)
3. După localizarea bazei de date:
➢ SGBD centralizate sunt cele care gestionează datele
amplasate într-o singură bază de date centrală;
➢ SGBD distribuite sunt cele care gestionează datele
amplasate pe mai multe calculatoare dintr-o reţea
tratându-le ca un tot unitar.

16
SGBD Oracle

LIMBAJUL PL/SQL. CARACTERIZARE


Introducere în limbajul PL/SQL
PL/SQL este un limbaj de programare procedural care extinde
limbajul descriptiv SQL şi care conţine următoarele elemente:
◦ Blocuri anonime
◦ Proceduri
◦ Funcţii
◦ Pachete de subprograme
◦ Declanşatori Structura generală a unui bloc PL/SQL

DECLARE --opţional
--secţiunea declarativă a blocului;
--cuprinde declaraţii de variabile, cursori, excepţii...;
BEGIN --obligatoriu
--secţiunea executabilă a blocului;
--cuprinde comenzi descriptive SQL, comenzi procedurale şi
structuri de programare PL/SQL;
EXCEPTION --opţional
--secţiunea de tratare a excepţiilor;
optimizarea cererii de regăsire
--cuprinde a datelor
acţiuni care se execută în momentul apariţiei unei
excepţii sau erori;
END; --obligatoriu
18
Introducere în limbajul PL/SQL
Variabile PL/SQL

➢ declararea variabilelor se realizează în zona declarativă


(delimitată prin DECLARE) a blocului;
➢ iniţializarea se poate face la declarare sau în zona de
execuţie (între BEGIN şi END);
➢ variabilele vor fi vizibile în restul blocului, respectiv şi în
blocurile incluse în el, mai puţin în sub-blocurile în care
numele lor este redefinit;

19
Introducere în limbajul PL/SQL
Variabile PL/SQL
➢ variabile scalare
➢ variabile compuse
➢ variabile referinţă
➢ variabile de tip obiect
➢ variabile de tip LOB (Large Objects):
• BLOB (Binary LOB)
• CLOB (Character LOB)
• BFILE (Binary File)
• NCLOB (National CLOB)
optimizarea cererii de regăsire a datelor
20
Introducere în limbajul PL/SQL
Variabile PL/SQL
➢ toate variabilele PL/SQL au un tip de dată, restricţii şi un şir
valid de valori;
➢ declararea şi iniţializarea se realizează astfel:
nume_variabila [CONSTANT] TIP_DATA [NOT NULL]
[:= | DEFAULT expresie]
➢ constantele trebuie obligatoriu iniţializate, iar ulterior nu
îşi vor putea schimba valoarea;
➢ variabilele NOT NULL trebuie obligatoriu iniţializate, iar
ulterior nu vor putea primi valoarea NULL.

optimizarea cererii de regăsire a datelor


21
Introducere în limbajul PL/SQL
Variabile PL/SQL

Atributul %TYPE
➢ utilizat pentru a declara o variabilă:
▪ conform definiţiei unei coloane dintr-o tabelă:
v_nume_ang angajati.nume%TYPE;
▪ conform definiţiei unei alte variabile:
v_sal NUMBER(5,2);
v_sal_mediu v_sal%TYPE;

optimizarea cererii de regăsire a datelor


22
Introducere în limbajul PL/SQL
Variabile PL/SQL

v_functie VARCHAR2(9);
v_totalsal NUMBER(9,2):=0;
v_datainceput DATE:=sysdate+7;
c_taxa CONSTANT NUMBER(3,2):=8.25;
Exemple

v_valid BOOLEAN NOT NULL:=TRUE;


v_pret produse.pret%TYPE:=100;
v_text CONSTANT VARCHAR2(30):='ABC';
v_stoc NUMBER DEFAULT 100;
v_compusa produse%ROWTYPE;

optimizarea cererii de regăsire a datelor


23
Introducere în limbajul PL/SQL
Variabile non-PL/SQL
Variabile de mediu sau variabile de legătură ale aplicaţiilor
gazdă (BIND VARIABLES)
◦ sunt variabile de legătură cu aplicaţia în care rulează
motorul PL/SQL;
◦ trebuie declarate în aplicaţie (în mediul gazdă) şi pot fi
accesate şi modificate în cadrul blocurilor PL/SQL;
◦ după terminarea execuţiei blocului PL/SQL, variabila
rămâne în mediul gazdă cu valoarea primită în urma
rulării blocului;
◦ nu pot fi utilizate în cadrul procedurilor, funcţiilor sau
pachetelor;

24
Introducere în limbajul PL/SQL
Variabile non-PL/SQL

Variabile de mediu sau variabile de legătură ale aplicaţiilor


gazdă (BIND VARIABLES)
◦ se declară în afara blocului PL/SQL prin cuvântul cheie
VARIABLE (pentru declararea unei variabile numerice,
nu se specifică precizia şi scala):
VAR[IABLE] g_numevariabilă TIP
◦ pentru utilizarea lor în cadrul unui bloc PL/SQL sau
într-o frază SQL din afara blocului se prefixează cu “:”
:host_variabila:=v_variabila;
◦ se afişează în afara blocului cu ajutorul comenzii PRINT
PRINT g_numevariabilă

25
Introducere în limbajul PL/SQL
Variabile non-PL/SQL
Variabile de substituţie
◦ de regulă, variabilele de substituţie sunt folosite pentru
a transmite valori spre comenzile SQL sau blocurile
PL/SQL, în timp ce variabilele de legătură (bind
variables) sunt folosite pentru a transmite valori în sens
invers sau pentru a transfera valori între blocuri PL/SQL
lansate succesiv (primul bloc setează variabila,
următorul o consultă);
◦ prin variabile de substituţie se pot transmite valori
comenzilor SQL sau blocurilor PL/SQL lansate (folosind
"&" sau "&&");

26
Introducere în limbajul PL/SQL
Variabile non-PL/SQL
Variabile de substituţie
◦ se pot invoca din comenzile SQL sau din blocurile
PL/SQL prin
&nume_variabila sau &&nume_variabila;
◦ sunt locale sesiunii SQL în care au fost declarate;
◦ variabilele de substituţie pot fi citite prin introducerea
de valori de la tastatură (utilizând ACCEPT
nume_variabila) sau se pot defini (prin DEFINE
nume_variabila = valoare).

27
Blocuri PL/SQL
Bloc fără secțiunile declarativă şi de tratare a excepțiilor:
BEGIN
DBMS_OUTPUT.PUT_LINE('SGBD Oracle');
END;

Bloc cu secțiune declarativă, dar fără secțiune de tratare a excepțiilor:


DECLARE
v_data DATE := SYSDATE;
BEGIN
DBMS_OUTPUT.PUT_LINE('Data curentă: '|| v_data);
END;

28
Blocuri PL/SQL
Bloc cu toate cele trei secţiuni:
DECLARE
x NUMBER := &p_x;
y NUMBER := &p_y;
BEGIN
DBMS_OUTPUT.PUT_LINE(x/y);
EXCEPTION
WHEN ZERO_DIVIDE THEN
DBMS_OUTPUT.PUT_LINE('Impartire la 0!');
END;
/

29
Blocuri PL/SQL
DECLARE
nume_tata VARCHAR2(20):='Ion';
data_nastere DATE:=TO_DATE('20-Apr-1972','DD-MON-YYYY');
BEGIN
DECLARE
nume_copil VARCHAR2(20):='Mihai';
data_nastere DATE:= TO_DATE('28-Feb-2000','DD-MON-YYYY');
BEGIN
DBMS_OUTPUT.PUT_LINE('Numele tatalui: '||nume_tata);
DBMS_OUTPUT.PUT_LINE('Data nasterii: '||data_nastere);
DBMS_OUTPUT.PUT_LINE('Numele copilului: '||nume_copil);
END;
DBMS_OUTPUT.PUT_LINE('Data nasterii: '||data_nastere);
END;
/

30
Blocuri PL/SQL
<<bloc_extern>>
DECLARE
nume_tata VARCHAR2(20):='Ion';
data_nastere DATE:=TO_DATE('20-Apr-1972','DD-MON-YYYY');
BEGIN
DECLARE
nume_copil VARCHAR2(20):='Mihai';
data_nastere DATE:= TO_DATE('28-Feb-2000','DD-MON-YYYY');
BEGIN
DBMS_OUTPUT.PUT_LINE('Numele tatalui: '||nume_tata);
DBMS_OUTPUT.PUT_LINE('Data nasterii: '
||bloc_extern.data_nastere);
DBMS_OUTPUT.PUT_LINE('Numele copilului: '||nume_copil);
DBMS_OUTPUT.PUT_LINE('Data nasterii: '||data_nastere);
END;
END;
/

31
Funcţii SQL suportate
În cadrul instrucţiunilor descriptive sunt suportate toate
tipurile de funcţii SQL (inclusiv funcţiile de grup în cadrul
instrucţiunii SELECT);
Instrucţiunile PL/SQL:
◦ suportă funcţii la nivel de înregistrare (single-row):
numerice, caracter, data, de conversie etc.;
◦ NU suportă funcţii de grup (SUM, MIN, MAX, AVG,
COUNT, STDDEV) sau funcţia DECODE.
Comenzi SQL în PL/SQL
Comenzi SQL care pot fi utilizate direct în PL/SQL
❑ LMD
✓SELECT
✓INSERT, UPDATE, DELETE, MERGE
DELETE
❑ LPT
✓COMMIT, SAVEPOINT, ROLLBACK

INSERT

UPDATE MERGE
Comenzi SQL în PL/SQL
Comenzi SQL care NU pot fi utilizate direct în PL/SQL

❑ LDD (CREATE, ALTER, DROP)

❑ LCD (GRANT, REVOKE)

Se execută prin utilizarea


SQL dinamic – curs 11
Blocuri PL/SQL
BEGIN
DELETE FROM clienti WHERE id_client=110;
INSERT INTO
clienti(id_client,prenume_client,nume_client)
VALUES (100,'&prenume','&nume');
UPDATE clienti
SET limita_credit = 25000
WHERE id_client = 222;
COMMIT;
END;
/

35
Observații
❑ un bloc PL/SQL nu este o unitate tranzacţională;

❑ într-un bloc pot fi mai multe tranzacţii sau blocul poate


face parte dintr-o tranzacţie;

❑ acţiunile COMMIT, SAVEPOINT şi ROLLBACK sunt


independente de blocuri, dar instrucţiunile asociate
acestor acţiuni pot fi folosite într-un bloc.

36
Blocuri PL/SQL
DECLARE
v_functia VARCHAR2(20);
v_salariul NUMBER;
BEGIN
SELECT id_functie, salariul
INTO v_functia, v_salariul
FROM angajati
WHERE id_angajat = 100;
DBMS_OUTPUT.PUT_LINE (v_functia||' '||v_salariul);
END;
/

37
Rezolvaţi
CARE ESTE EFECTUL BLOCULUI PL/SQL DE MAI JOS?
SET SERVEROUTPUT ON
DECLARE
a NUMBER(10,2);
b NUMBER(2) DEFAULT 7;
c NUMBER(2) DEFAULT 5;
BEGIN
a:=MAX(B,C);
DBMS_OUTPUT.PUT_LINE('a=
'||a);
END;
/
38
Rezolvaţi
CARE ESTE EFECTUL BLOCURILOR PL/SQL DE MAI JOS?
SET SERVEROUTPUT ON SET SERVEROUTPUT ON
DECLARE DECLARE
x NUMBER(2) NOT NULL; x NUMBER(2) NOT NULL :=2;
BEGIN BEGIN
x:=2; DBMS_OUTPUT.PUT_LINE(x);
DBMS_OUTPUT.PUT_LINE(x); END;
END; /
/

39
Rezolvaţi
CARE ESTE EFECTUL BLOCURILOR PL/SQL DE MAI JOS?
SET SERVEROUTPUT ON SET SERVEROUTPUT ON
DECLARE DECLARE
v_nume VARCHAR2(20); v_nume VARCHAR2(20) := 'Ion';
BEGIN BEGIN
DBMS_OUTPUT.PUT_LINE v_nume:= 'Gheorghe';
('Numele este: '||v_nume); DBMS_OUTPUT.PUT_LINE
v_nume:= 'Ion'; ('Numele este: '||v_nume);
DBMS_OUTPUT.PUT_LINE END;
('Numele este: '||v_nume); /
END;
/

40
Rezolvaţi
CARE ESTE EFECTUL BLOCURILOR PL/SQL DE MAI JOS?
SET SERVEROUTPUT ON SET SERVEROUTPUT ON
DECLARE DECLARE
a NUMBER(7); a NUMBER(7);
b NUMBER(7); b NUMBER(7);
BEGIN
BEGIN
SELECT
SUM(salariul),MAX(salariul) SELECT
INTO a,b FROM angajati; SUM(salariul),MAX(salariul)
DBMS_OUTPUT.PUT_LINE('a=' FROM angajati;
||a); END;
DBMS_OUTPUT.PUT_LINE('b=' /
||b);
END;
/

41
Rezolvaţi
CARE ESTE EFECTUL BLOCURILOR PL/SQL DE MAI JOS?
SET SERVEROUTPUT ON SET SERVEROUTPUT ON
BEGIN DECLARE
v_nume VARCHAR2(20);
SELECT * FROM angajati;
v_prenume VARCHAR2(20);
END; BEGIN
/ SELECT nume, prenume INTO
v_nume, v_prenume FROM
angajati WHERE
id_angajat=101;
DBMS_OUTPUT.PUT_LINE(v_nume
||' '|| v_prenume);
END;
/
42
Rezolvaţi
Care dintre următoarele declaraţii sunt corecte:
a. DECLARE
v_nume, v_prenume VARCHAR2(14);

b. DECLARE
v_test NUMBER(5) NOT NULL;

c. DECLARE
v_sal_max NUMBER(5,2) = 550000;

d. DECLARE
v_data_comanda BOOLEAN := SYSDATE;

43
Rezolvaţi
Indicaţi ce tipuri de date vor avea asociate variabilele de mai jos, ca
urmare a atribuirilor efectuate:
a. v_email := v_nume || TO_CHAR(v_id_angajat);

b. v_data := TO_DATE('20-JAN-1999','DD-MON-YYYY');

c. v_sal := (1000*12) + 500;

d. v_test := FALSE;

e. v_data_comanda:= SYSDATE;

44
Rezolvaţi
DECLARE
v_id_client NUMBER(4) := 1600;
v_nume_client VARCHAR2(300) := 'SC Alfa SRL';
v_id_nou NUMBER(3) := 500;
BEGIN
DECLARE
v_id_client NUMBER(4) := 0;
v_nume_client VARCHAR2(300) := 'SC Beta SRL';
v_id_nou NUMBER(3) := 300;
v_nume_nou VARCHAR2(300) := 'SC Gama SRL';
BEGIN
v_id_client:= v_id_nou;
v_nume_client:= v_nume_nou;
A
END;
v_id_client:= v_id_client / 10;
B
END;
/

45
Rezolvaţi
Indicaţi ce tipuri de date şi ce valori vor avea următoarele variabile:
a. v_id_client la poziţia A

b. v_nume_client la poziţia A

c. v_id_nou la poziţia A

d. v_nume_nou la poziţia A

e. v_id_client la poziţia B

f. v_nume_client la poziţia B

46
CURSUL 4...

SGBD relaţionale

S-ar putea să vă placă și