SGBD2 - PLSQL Concepte Generale
SGBD2 - PLSQL Concepte Generale
2-1
2-2
Asigur accesarea datelor unei baze de date i permite gruparea unei mulimi de
comenzi ntr-un bloc unic de tratare a datelor.
Clasificarea limbajelor
permite att SQL Static (textul complet al comenzii este cunoscut la momentul
compilrii), ct i SQL Dinamic (textul complet al comenzii este cunoscut la
run time);
2-3
declararea tipurilor;
Este portabil
o
Programele PL/SQL pot rula pe orice suport pe care exist un server Oracle.
Se pot crea programe, pachete sau librrii portabile care pot fi utilizate cu
bazele de date Oracle n medii diferite.
2-4
Se afl pe server-ul Oracle sau n unele utilitare Oracle (de exemplu, Oracle Forms).
o
Dac utilitarul Oracle are motor PL/SQL, iar blocul PL/SQL nu conine
comenzi SQL, atunci acesta este procesat local.
Un subprogram PL/SQL stocat este un obiect al bazei de date i poate fi
accesat de orice aplicaie.
Apelurile procedurilor care sunt stocate pe server sunt trimise pentru
procesare motorului PL/SQL de pe server.
Subprogramele PL/SQL (proceduri, funcii) declarate ntr-o aplicaie
Developer Suite (de exemplu, Oracle Forms) sunt diferite de cele stocate n
baza de date. Acestea sunt procesate local.
1.
2.
3.
4.
5.
6.
7.
2-5
2.5. Evoluie
n 1977 Larry Ellison mpreun cu civa prieteni nfiineaz compania Software
Development Laboratories.
n 1979 numele companiei este schimbat n Relational Software, Inc. Primul produs
lansat de aceast companie a fost o baz de date relaional denumit Oracle. Dei era prima
versiune, din motive de marketing a fost denumit Oracle V2. Pentru accesul la date era
utilizat SQL i nu permitea tranzacii. n acel an Relational Software, Inc era singura
companie care producea o baz de date compatibil cu SQL.
n 1982 numele companiei a fost schimbat n Oracle Corporation. Limbajul ales
pentru baza de date a fost modelat pe ADA, un limbaj de programare orientat obiect de nivel
nalt care este extins din Pascal. Oracle a denumit acest limbaj PL/SQL. Fiind descendent al
limbajelor ADA i Pascal, PL/SQL este un limbaj bazat pe structur de blocuri.
Oracle V3 (1983)
o
Oracle V4 (1984)
o
Oracle V5 (1985)
o
arhitectura client-server
Oracle V7 (1992)
o
proceduri stocate
integritate referenial
trigger-i
tablourile PL/SQL
distribuire
2-6
Oracle V8 (1997)
o
rutine externe
tipul LOB
aplicaii multimedia
drop column
partiionare i subpartiinare
XML
WebDB
indexare online
tranzacii autonome
baza de date ncorporeaz Java Virtual Machine (Oracle JVM cunoscut i sub
numele de Aurora)
tabele externe
Oracle Streams
XML DB
funcii tabel
expresii CURSOR
2-7
permanentizri asincrone
mbuntire OLAP
Procedurile PL/SQL se execut mai rapid prin compilarea lor ntr-un cod nativ.
Procedurile sunt translatate n cod C, compilate cu ajutorul unui
compilator C i apoi automat preluate n procese Oracle.
Aceast tehnic, care nu cere restaurarea bazei de date, poate fi utilizat
pentru proceduri i pachete Oracle.
Oracle furnizeaz soluii (interfee client-side i server-side, utilitare, JVM
integrat cu server-ul Oracle) dezvoltatorilor de aplicaii pentru crearea,
gestionarea i exploatarea aplicaiilor Java.
Procedurile Java stocate pot fi apelate dintr-un pachet PL/SQL, iar proceduri
PL/SQL existente pot fi invocate din proceduri Java. Datele SQL pot fi
accesate prin dou interfee (API): JDBC i SQLJ. Astfel:
pentru a invoca o procedur Java din SQL este nevoie de interfaa Java
Stored Procedures,
pentru a invoca dinamic comenzi SQL complexe este folosit JDBC,
pentru a utiliza comenzi SQL statice, simple (referitoare la un tabel ale
crui coloane sunt cunoscute) dintr-un obiect Java este folosit SQLJ.
2-8
JAVA
Necesit BD sau
utilitar Oracle
da
nu
nu
Orientat obiect
cteva
caracteristici
nu
da
foarte eficient
mai puin
eficient
mai puin
eficient
da
oarecum
da
relativ uor
mai dificil
mai dificil
Performan asupra
BD Oracle
Portabil pe
diferite SO
Uor de nvat
Schema simplificat
o
Entiti
data,
status,
id_casa,
id_client,
id_adresa_livrare,
2-9
Subentiti
Tabele asociative
clasificare
> 1000
500
> 2000
1000
200
2-10
clasific_clienti
clasificare = 'A'
nr_produse > 1000
id_categorie = 1;
UPDATE
SET
WHERE
AND
clasific_clienti
clasificare = 'B'
nr_produse BETWEEN 500 AND 1000
id_categorie = 1;
1. Cte comenzi UPDATE sunt necesare pentru datele din tabelul anterior?
2. Este eficient o astfel de abordare?
3. Exist alte metode de abordare utiliznd SQL?
Varianta2
UPDATE clasific_clienti
SET
clasificare = CASE WHEN nr_produse>1000
THEN 'A'
WHEN nr_produse BETWEEN 500
AND 1000 THEN 'B'
ELSE 'C' END
WHERE id_categorie = 1;
Varianta3
UPDATE clasific_clienti
SET
clasificare =
CASE WHEN nr_produse>1000
AND id_categorie=1 THEN 'A'
WHEN nr_produse BETWEEN 500 AND 1000
AND id_categorie = 1 THEN 'B'
WHEN nr_produse BETWEEN 0 AND 499
AND id_categorie=1 THEN 'C'
WHEN nr_produse>2000
AND id_categorie=2 THEN 'A'
WHEN nr_produse BETWEEN 1000 AND 2000
AND id_categorie = 2 THEN 'B'
WHEN nr_produse BETWEEN 200 AND 999
AND id_categorie=2 THEN 'C'
ELSE 'D' END;
2-11
clasific_clienti
clasificare = v_clasific
id_client = i.id_client
id_categorie = i.id_categorie;
2-12
Varianta2
DECLARE
CURSOR info IS
SELECT id_client, id_categorie, nr_produse
FROM
clasific_clienti
FOR UPDATE;
v_clasific clasific_clienti.clasificare%type;
BEGIN
FOR i IN info LOOP
CASE WHEN i.nr_produse>1000
AND i.id_categorie=1
THEN v_clasific := 'A';
WHEN i.nr_produse BETWEEN 500 AND 1000
AND i.id_categorie = 1
THEN v_clasific := 'B';
WHEN i.nr_produse BETWEEN 0 AND 499
AND i.id_categorie=1
THEN v_clasific := 'C';
WHEN i.nr_produse>2000
AND i.id_categorie=2
THEN v_clasific := 'A';
WHEN i.nr_produse BETWEEN 1000 AND 2000
AND i.id_categorie = 2
THEN v_clasific := 'B';
WHEN i.nr_produse BETWEEN 200 AND 999
AND i.id_categorie=2
THEN v_clasific := 'C';
ELSE v_clasific := 'D';
END CASE;
UPDATE clasific_clienti
SET
clasificare = v_clasific
WHERE CURRENT OF info;
END LOOP;
END;
/
5. Este mai eficient aceast abordare? Ct timp este blocat resursa?
6. Exist i alte metode de rezolvare a problemei?
7. Numrul de produse cumprate de client trebuie s fie n permanen
actualizat i s corespund situaiei prezente. Se poate realiza realtime acest
lucru cu SQL?
2-13
Bibliografie
1. Programare avansat n Oracle9i, I. Popescu, A. Alecu, L. Velcescu, G.
Florea (Mihai), Ed. Tehnic (2004)
2. Oracle Database PL/SQL Language Reference 11g Release 2, Oracle
Online Documentation (2012)
3. Oracle Database 11g: PL/SQL Fundamentals, Student Guide, Oracle
University (2009)
4. A Mini-History of Oracle and PL/SQL, L. Cunningham (2012)
(http://www.dba-oracle.com/t_edb_pl_sql_features_release.htm)
5. Oracle Database, Wikipedia (2012)
(http://en.wikipedia.org/wiki/Oracle_Database)