Documente Academic
Documente Profesional
Documente Cultură
SGBD Oracle
CURSUL 3
BUCUREŞTI
2022-2023
1. Funcțiile SGBD
2. Arhitectura SGBD
3. Clasificarea SGBD
2
Funcțiile SGBD
UTILIZARE
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
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
8
Funcțiile SGBD.
Funcţia de administrare
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
INSTRUMENTE
11
Arhitectura SGBD (cont.)
INTERFEȚE
INSTRUMENTE
INSTRUMENTE
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
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
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.
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;
v_functie VARCHAR2(9);
v_totalsal NUMBER(9,2):=0;
v_datainceput DATE:=sysdate+7;
c_taxa CONSTANT NUMBER(3,2):=8.25;
Exemple
24
Introducere în limbajul PL/SQL
Variabile non-PL/SQL
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;
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
35
Observații
❑ un bloc PL/SQL nu este o unitate tranzacţională;
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');
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