0% au considerat acest document util (0 voturi)
119 vizualizări13 pagini

SGBD2 - PLSQL Concepte Generale

SGBD curs

Încărcat de

Lidia Mihailidis
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
119 vizualizări13 pagini

SGBD2 - PLSQL Concepte Generale

SGBD curs

Încărcat de

Lidia Mihailidis
Drepturi de autor
© © All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca PDF, TXT sau citiți online pe Scribd
Sunteți pe pagina 1/ 13

Sisteme de Gestiune a Bazelor de Date

2-1

2. PL/SQL - Concepte generale


Cuprins
2.1. Ce este PL/SQL?................................................................................................................. 2
2.2. Legtura cu SQL ................................................................................................................. 2
2.3. Caracteristicile limbajului PL/SQL .................................................................................... 2
2.4. Motorul PL/SQL ................................................................................................................. 4
2.5. Evoluie .............................................................................................................................. 5
2.6. Comparaie cu alte limbaje ................................................................................................. 8
2.7. Diagrama bazei de date utilizat n exemple ...................................................................... 8
2.8. De ce este utilizat PL/SQL? ................................................................................................ 9
Bibliografie............................................................................................................................... 13

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-2

2.1. Ce este PL/SQL?

Un limbaj de programare procedural creat de compania Oracle.

Asigur accesarea datelor unei baze de date i permite gruparea unei mulimi de
comenzi ntr-un bloc unic de tratare a datelor.

Poate fi utilizat doar cu o baz de date Oracle sau cu un utilitar Oracle.

Limbaje echivalente dezvoltate de ali productori

2.2. Legtura cu SQL

SQL (Structured Query Language)


o

Este un limbaj non-procedural, denumit i limbaj declarativ, care permite


programatorilor s se axeze preponderent pe input/output i mai puin pe paii
programului.

Este un limbaj 4GL (fourth-generation-programming language), un limbaj


care este mai apropiat de limbajul natural, dect de limbajul de programare.

A fost standardizat de American National Standards Institute (ANSI).

PL/SQL (Procedural Language/Structured Query Language)


o

Reprezint extensia procedural a limbajului SQL.

Include att instruciuni SQL pentru prelucrarea datelor i pentru gestiunea


tranzaciilor, ct i instruciuni proprii.

Este un limbaj 3GL (third-generation programming language).

Clasificarea limbajelor

2.3. Caracteristicile limbajului PL/SQL

Este integrat cu server-ul Oracle i cu utilitarele Oracle.

Este puternic integrat cu SQL:


o

permite utilizarea tuturor comenzilor SQL de prelucrare a datelor, de control al


tranzaciilor, a funciilor SQL, a operatorilor i pseudo-coloanelor;

suport tipurile de date SQL;

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);

permite procesarea setului de rezultate al unei cereri SQL linie cu linie.

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-3

Extinde SQL prin construcii specifice limbajelor procedurale:


o

definirea constantelor i a variabilelor;

declararea tipurilor;

definirea i utilizarea cursoarelor;

utilizarea structurilor de control;

definirea procedurilor i funciilor;

modularizarea programelor (subprograme, pachete);

detectarea i gestiunea erorilor de execuie i a situaiilor excepionale;

introducerea tipurilor obiect i a metodelor etc.

Permite definirea i utilizarea declanatorilor.

Asigur securitatea informaiei.

Mrete performana aplicaiei:


o

permite nglobarea mai multor instruciuni ntr-un singur bloc i trimiterea


acestui ctre baza de date, reducnd-se astfel traficul dintre aplicaie i baza de
date.

Are suport pentru dezvoltarea aplicaiilor Web.


o

Aplicaiile Web scrise n PL/SQL sunt proceduri stocate care interacioneaz cu


un browser Web printr-un protocol HTTP.

Pentru a facilita dezvoltarea aplicaiilor Web sistemul furnizeaz o serie


de pachete predefinite (de exemplu, pachetul UTL_SMTP poate fi
utilizat pentru a trimite un mail dintr-o procedur stocat PL/SQL)

Pachetele pot fi folosite mpreun cu Oracle Internet Application


Server i WebDB.

PL/SQL Server Pages (PSPs) permite dezvoltarea paginilor Web cu coninut


dinamic:

scripturile PL/SQL pot fi integrate n codul surs HTML;

scripturile ruleaz atunci cnd un client Web solicit o pagin;

un script poate accepta parametrii, interoga sau actualiza baza de date i


a afia rezultatele ntr-o pagin personalizat.

Este portabil
o

Programele PL/SQL pot rula pe orice suport pe care exist un server Oracle.

Nu depinde de platform sau de sistemul de operare.

Se pot crea programe, pachete sau librrii portabile care pot fi utilizate cu
bazele de date Oracle n medii diferite.

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-4

2.4. Motorul PL/SQL

Compileaz i execut codul PL/SQL.

Se afl pe server-ul Oracle sau n unele utilitare Oracle (de exemplu, Oracle Forms).
o

Unele utilitare Oracle au propriul motor PL/SQL. Acesta este independent fa


de motorul PL/SQL de pe server-ul Oracle. Utilitarul transmite blocurile ctre
motorul PL/SQL local care execut toate comenzile procedurale.

Indiferent de mediu, motorul PL/SQL execut comenzile procedurale, dar trimite


comenzile SQL ctre motorul SQL de pe server-ul Oracle.
o

Dac nu ar fi incluse n blocuri PL/SQL comenzile SQL ar fi procesate separat,


fiecare implicnd cte un apel la server-ul Oracle.

Comenzile procedurale pot fi executate pe staia client fr interaciune cu server-ul


Oracle sau n ntregime pe server-ul Oracle.
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.

Unde se afl motorul SQL?

2.

Unde se afl motorul PL/SQL?

3.

Se poate scrie cod PL/SQL folosind SQL*Plus sau SQL Developer?

4.

Utilitarul SQL*Plus are motor PL/SQL? Dar utilitarul SQL Developer?

5.

Comenzile PL/SQL pot fi incluse n cod SQL? Dar invers?

6.

SQL transmite server-ului de baze de date ce s fac (declarativ), nu cum s


fac. (adevrat/fals)

7.

PL/SQL transmite server-ului de baze de date cum s fac (procedural).


(adevrat/fals)

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

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

funcionalitile commit i rollback pentru tranzacii


consisten la citire

Oracle V5 (1985)
o

arhitectura client-server

suport pentru cererile distribuite

Oracle V6 (1988) prima versiune Oracle care suport PL/SQL


o

limbaj limitat, bazat pe script-uri, nu pe proceduri stocate

gestiunea erorilor primitiv

SQL complet integrat

blocare la nivel de linie

Oracle V7 (1992)
o

proceduri stocate

integritate referenial

trigger-i

tablourile PL/SQL

pachetul UTL_FILE pentru a putea accesa fiierele sistemului de operare

pachetul DBMS_SQL pentru SQL dinamic

Oracle Advanced Queuing

Oracle Enterprise Manager

distribuire

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-6

Oracle V8 (1997)
o

orientarea obiect (tipuri obiect i metode)

rutine externe

suport pentru cereri stea

tipul LOB

tipuri colecie (vectori i tablouri imbricate)

aplicaii multimedia

capacitatea de a realiza apeluri HTTP din baza de date

Oracle V8i (1999) devine baz de date comercial


o

drop column

partiionare i subpartiinare

XML

WebDB

funcii analitice n SQL

indexare online

tranzacii autonome

rutine externe Java

SQL dinamic nativ

operaii bulk bind

trigger-i baz de date

mbuntire a performanei SQL i PL/SQL

baza de date ncorporeaz Java Virtual Machine (Oracle JVM cunoscut i sub
numele de Aurora)

Oracle V9i (2001)


o

tabele externe

compilare nativ (PL/SQL la C)

Oracle Streams

XML DB

mbuntiri la nivel de data warehouse i BI

extindere i mbuntiri pentru SQL analitic

comenzi i expresii CASE

tipuri noi de date n SQL i PL/SQL (DATATIME, TIMESTAMP, colecii pe


mai multe niveluri)

ierarhii de tipuri i subtipuri

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

funcii tabel

expresii CURSOR

claselor Java n baza de date

Real Application Cluster

2-7

Oracle V10g (2003)


o

recyclebin (recuperare obiecte terse)

permanentizri asincrone

criptarea transparent a datelor (criptare automat la nivel de coloan)

mbuntire SQL analitic

SQL Tuning Advisor

mbuntire OLAP

SQL Model Clause

proceduri stocate .Net

Oracle V11g (2007)

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.

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-8

2.6. Comparaie cu alte limbaje


PL/SQL

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

2.7. Diagrama bazei de date utilizat n exemple

Gestiunea activitii unei companii comerciale


Vezi diagrame curs

Schema simplificat
o

Entiti

DEPOZITE(id_depozit#, denumire, adresa, oras, judet, orar, capacitate, valoare,


id_director, id_tara)
SECTOARE(id_sector#, descriere, id_depozit)
ZONE (id_zona#, descriere, capacitate_maxima, capacitate_folosita, id_sector)
PRODUSE (id_produs#, denumire, descriere, stoc_curent, stoc_impus, pret_unitar,
greutate, volum, tva, id_zona, id_um, id_categorie, data_crearii,
data_modificarii, activ)
CARACTERISTICI (#id_caracteristica, denumire, descriere)
UNITATI_MASURA(id_um#, denumire, descriere)
CATEGORII (id_categorie#, denumire, nivel, id_parinte)
FACTURI(id_factura#,

data,

status,

id_casa,

id_client,

id_adresa_livrare,

id_adresa_facturare, id_tip_livrare, id_tip_plata, interval_livrare)


CASE(id_casa#, nume, serie, parola)
TIP_LIVRARE(id_tip_livrare#, denumire, tarif, id_firma_t)
ADRESE(id_adresa#, strada, oras, tara, cod_postal, id_client)
TIP_PLATA(id_tip_plata#, cod, descriere)
CLIENTI(id_client#, telefon, email, tip, oras, data_crearii, data_modificarii)

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-9

Subentiti

PERSOANE_FIZICE(id_client_f#, nume, prenume, cnp)


PERSOANE_JURIDICE(id_client_j#, denumire, persoana_contact, cui, cont, banca,
cod_fiscal, numar_inregistrare)
o

Tabele asociative

CLIENTI_AU_PRET_PREFERENTIAL(id_pret_pref#, id_categorie, id_client_j,


discount, data_in, data_sf)
PRODUSE_AU_CARACTERISTICI (id_produs#, id_caracteristica#, valoare )
FACTURI_CONTIN_PRODUSE (id_factura#, id_produs#, cantitate, pret_facturare)

2.8. De ce este utilizat PL/SQL?

n practic exist numeroase situaii n care SQL se dovedete a fi limitat.

Exemplu vezi explicaii curs


o

Clienii companiei pot avea preuri personalizate n funcie de anumite criterii.


Comenzile se realizeaz online, clienii consultnd cataloage cu preuri
personalizate.

n cazul n care preul personalizat se calculeaz raportat la categoriile de


produse este nevoie de o clasificare a clienilor n funcie de categorie i
numrul de produse cumprate din categoria respectiv.

Tabelul CLASIFIC_CLIENTI (id_client, id_categorie, nr_produse, clasificare)


coninea deja o clasificare a clienilor.

Se decide o nou clasificare a acestora conform tabelului de mai jos.


id_categorie

clasificare

numr produse cumprate

> 1000

500

> 2000

1000

200

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-10

Soluie SQL posibil


Varianta1
UPDATE
SET
WHERE
AND

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;

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

2-11

4. Ce se ntmpl atunci cnd exist mai multe categorii de produse i mai


multe niveluri de clasificare pentru fiecare categorie?

Soluie PL/SQL posibil


Varianta1
DECLARE
CURSOR info IS
SELECT id_client, id_categorie, nr_produse
FROM
clasific_clienti;
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
SET
WHERE
AND
END LOOP;
END;
/

clasific_clienti
clasificare = v_clasific
id_client = i.id_client
id_categorie = i.id_categorie;

1. De cte ori se execut comanda UPDATE?


2. Este eficient o astfel de abordare?
3. Ct timp este blocat resursa?
4. Ar fi util o cheie primar artificial?

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

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?

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

Sisteme de Gestiune a Bazelor de Date

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)

Copyright 2012-2015 Lect. Dr. Gabriela Mihai. Toate drepturile rezervate.

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