Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Ce este PL/SQL

sql


Ce este PL/SQL?

PL/SQL este limbajul procedural al mediului Oracle si reprezinta o extensie a limbajului SQL Oracle. PL/SQL este un limb'aj cu structura de bloc; acesta da posibilitatea programatorilor sa codifice proceduri, functii si blocuri anonime (nenominalizate) care combina instructiuni SQL cu instructiuni procedurale. Procedurile, functiile si cursoarele care formeaza o unitate logica pot fi grupate si stocate împreuna în pachete (packages). Acestor pachete le pot fi furnizati parametri, ceea ce permite procedurilor si functiilor sa primeasca si sa returneze valori.



PL/SQL este complet compatibil cu comenzile limbajului de manipulare a datelor ANSI/ISO SQL si cu tipurile de date ale limbajului SQL. Datele complexe sunt manipulate usor cu tipul boolean de 22222m129w date si cu tipurile compuse ale limbajului PL/SQL.

Cu ajutorul blocurilor, puteti grupa declaratii si instructiuni care formeaza o unitate logica. Declaratiile sunt locale în'bloc si îsi înceteaza existenta dupa încheierea executiei blocului. Blocurile PL/SQL pot aparea oriunde pot sa apara blocuri SQL.

Limbajul PL/SQL este procesat de propriul "motor" PL/SQL. Acest motor este încorporat în urmatoarele produse Oracle:

Oracle Server with Procedural Option

SQL*Forms

SQL*Menu

SQL*Report Writer

Oracle Graphics

De ce se utilizeaza PL/SQL

PL/SQL este un limbaj complet de procesare a tranzactiilor, care prezinta urmatoarele avantaje:

PL/SQL este compatibil cu SQL. SQL este un limbaj neprocedural, ceea ce înseamna ca serverul Oracle stabileste metoda optima de executie a instructiunilor acestuia. PL/SQL suporta instructiunile SQL de manipulare a datelor, cele referitoare la controlul cursoarelor si instructiunile de gestionare a tranzactiilor.

PL/SQL îmbunatateste performantele serverului prin reducerea numarului de apeluri dintre aplicatie si programul Oracle.

Aplicatia dumneavoastra poate transmite catre mediul Oracle mai multe instructiuni SQL simultan, ceea ce îmbunatateste traficul în retea.

întregul cod PL/SQL este compatibil cu orice sistem de operare si cu orice platforma pe care ruleaza sistemul Oracle.

Se reduce numarul de recompilari deoarece pachetele nu trebuie recompilate atunci când redefiniti procedurile din interiorul pachetului.

Se reduce numarul de operatii de I/O cu discul deoarece functiile si procedurile care formeaza o unitate logica sunt stocate împreuna.

PL/SQL ofera structuri de control conditionale, iterative si secventiale, ceea ce permite o formidabila flexibilitate în programare.

Este încurajata modularizarea programelor, deoarece PL/SQL va permite sa împartiti aplicatia în module logice bine definite si usor de gestionat.

Se simplifica depistarea si tratarea erorilor.

Cum se utilizeaza PL/SQL?

În lipsa limbajului PL/SQL, serverul Oracle ar trebui sa proceseze fiecare instructiune SQL separat. Aceasta ar duce la o reducere drastica a performantelor, datorata apelului suplimentar pentru fiecare instructiune.

Cu PL/SQL poate fi transmis dintr-o data serverului Oracle un întreg bloc de instructiuni, ceea ce are ca efect reducerea traficului în retea, între aplicatia dumneavoastra si serverul Oracle. De asemenea, instrumentele Oracle, cum ar fi Developer 2000, beneficiaza de pe urma caracteristicilor de procesare procedurala a PL/SQL, ceea ce le îmbunatateste performantele.

Limbajul PL/SQL este compus din blocuri, structuri de control, atribute, variabile si cursoare. Paragrafele urmatoare furnizeaza informatii în legatura cu utilizarea limbajului procedural PL/SQL, care reprezinta o extensie a limbajului SQL.

Blocuri PL/SQL

PL/SQL este un limbaj axat pe blocuri, cu caracteristici de procesare procedurala si de tratare a erorilor. Aceste blocuri sunt compuse din proceduri, functii si blocuri anonime care sunt grupate la un loc din punct de vedere logic, în vederea rezolvarii unei probleme specifice.

Un bloc PL/SQL este compus din trei parti:

Declaratie    - Toate obiectele blocului trebuie declarate

Executie    - Obiectele sunt definite în vederea manipularii datelor

Exceptii    - Aici sunt plasate rutinele de tratare a erorilor

Figura 22.1 Ilustreaza un bloc PL/SQL generic.

Figura 22.1.

Formatul unui bloc

PL/SQL generic

Arhitectura limbajului PL/SQL

PL/SQL este în acelasi timp o tehnologie si o parte integranta a sistemului Oracle. El poseda propriul motor de procesare care executa blocurile si subprogramele PL/SQL. Acest motor poate fi instalat pe server sau în oricare dintre instrumentele de dezvoltare, cum ar fi SQL*Forms. Daca programul gazda nu poseda un motor PL/SQL, blocurile de cod sunt transmise serverului Oracle în vederea procesarii. Figura 22.2 ilustreaza motorul PL/SQL ca parte integranta a serverului Oracle 7.2. Acest motor executa instructiunile procedurale si transmite instructiunile SQL serverului Oracle spre a fi executate de executorul de instructiuni SQL al acestuia.

Atunci când instrumentele Oracle dispun de motorul PL/SQL, ele proceseaza direct blocurile PL/SQL. Figura 22.3 ilustreaza modul în care instrumentul SQL*Form proceseaza direct blocurile PL/SQL cu propriul motor PL/SQL si transmite serverului Oracle instructiunile SQL în vederea procesarii.

Figura 22.2.

Motorul PL/SQL

al serverului Oracle

Figura 22.3.

Procesarea blocurilor

PL/SQL de catre

instrumentul SQL'Form.

    

PL/SQL si SQL*Plus

PL/SQL nu poseda facilitati de introducere si afisare interactiva a datelor, în consecinta, aveti nevoie de un instrument cum'ar fi 'SQL*Plus sau de medii OCI (Oracle Caii Interface) pentru a putea utiliza PL/SQL.

In SQL*Plus puteti folosi PL/SQL pentru a efectua urmatoarele:

Introducerea, stocarea si rularea blocurilor PL/SQL

Crearea, încarcarea si rularea unui script continând blocuri PL/SQL

Apelarea unei proceduri rezidente

Fiecare bloc PL/SQL începe cu cuvintele rezervate declare sau begin. Cuvântul begin este utilizat drept punct de început al unui bloc daca acesta nu contine nici o declaratie, începerea unui bloc indica programului SQL*Plus sa goleasca tamponul SQL, sa intre în modul introducere si sa ignore semnele punct si virgula (;). Daca blocul se încheie cu punct, el va fi stocat în tamponul SQL.

Puteti salva continutul tamponului cu comanda s ave. Pentru a salva un bloc pe care l-ati editat, folositi comanda save cu clauza replace.

Pentru a citi si a încarca în tampon un bloc PL/SQL salvat anterior, folositi comanda get. Instructiunea urmatoare citeste si încarca în memorie scriptul PL/SQL articole_lunare:

SQL> GET articole_lunare

Pentru a executa un bloc PL/SQL rezident în tamponul SQL*Plus, folositi comenzile / sau run.

De exemplu, instructiunea urmatoare ilustreaza ambele moduri de executare a blocului rezident în tampon:

SQL> RUN

sau

SQL> /

Compatibilitatea cu limbajul SQL

Prin definitie, limbajul PL/SQL reprezinta extensia procedurala a limbajului SQL. PL/SQL suporta toate comenzile limbajului de manipulare a datelor (DML) ale limbajului SQL (cu exceptia comenzii explain plan), precum si comenzile pentru controlul tranzactiilor, functiile, pseudo-coloanele si operatorii SQL. Limbajul PL/SQL nu suporta comenzile de definire a datelor, comenzile pentru controlul sesiunii si comenzile pentru controlul sistemului ale limbajului SQL.

Notiuni fundamentale despre PL/SQL

PL/SQL este asemanator cu oricare alt limbaj de programare prin faptul ca poseda propria structura, sintaxa si semantica. Paragrafele urmatoare trateaza diverse aspecte ale limbajului PL/SQL.

Variabile si constante

Puteti sa definiti variabile si constante si sa le utilizati în instructiuni SQL si în instructiuni procedurale oriunde poate fi folosita o expresie. Singura exceptie o constituie faptul ca nu sunt permise referintele anticipate. Acest lucru înseamna ca trebuie sa declarati toate variabilele si constantele înainte de a face referire la ele în alte instructiuni.

Limbajul PL/SQL prevede aceleasi tipuri de date ca si limbajul SQL, si anume, char, number, long, date si varchar2. In plus, PL/SQL poseda câteva tipuri proprii, printre care se numara tipurile boolean si binary_integer. Exemplul urmator ilustreaza definirea variabilelor si a constantelor:

nr_art VARCHAR2(15); inreg_articol BOOLEAN;

Puteti atribui valori variabilelor cu operatorul de atribuire (: =). Variabila apare în stânga operatorului de atribuire, iar expresia apare în dreapta acestuia:

pret := cant * (cost*2.5); inreg_articol := TRUE;

A doua metoda de a atribui o valoare unei variabile este sa folositi instructiunea select pentru a prelua o valoare într-o variabila. Exemplul urmator selecteaza o valoare si o atribuie variabilei nume_art:

SELECT lst.articole.nume_articol INTO nume_art WHERE nr_articol = cod_articol;

Pentru a declara o constanta, includeti cuvântul cheie constant în instructiunea de declarare a variabilei. Instructiunea urmatoare defineste constanta cost_plus:

cost_plus := CONSTANT REAL:= 2.5;

Atributele constantelor si ale variabilelor

Fiecarei variabile si constante PL/SQL îi sunt asociate doua atribute. Aceste atribute reprezinta proprietati ale variabilei sau ale constantei la care puteti face referire. Iata descrierea atributelor PL/SQL:

%type

Descrie tipul variabilei, constantei sau coloanei tabelului. Puteti declara o variabila folosind atributul %type ca în instructiunea urmatoare:

nr_art := lst_articole.cod_articol%TYPE;

În acest exemplu, variabila nr_art este de acelasi tip ca si coloana cod_articol din tabelul LST_ARTICOLE.

% rowtype

Descrie o înregistrare care reprezinta o linie a unui tabel. Exemplul urmator creeaza o înregistrare numita inreg_articol ale carei câmpuri au aceleasi nume si tipuri ca si coloanele care apar în tabelul LST_ARTICOLE:

DECLARE

inreg_articol lst_articole%ROWTYPE;

În continuare, puteti folosi notatia cu punct pentru a accesa orice câmp al înregistrarii de tip rowtype. Instructiunea urmatoare atribuie valoarea câmpului nume_articol variabilei descriere_articol:

descriere articol :=

inreg artîcol.nume articol;

Setul de caractere

Setul de caractere al limbajului PL/SQL include urmatoarele:

Alfabetul, cu majuscule si litere mici în limbajul PL/SQL nu se face distinctie între majuscule si litere mici decât în cazul în care acestea apar în siruri de caractere.

Numerele de la O la 9

Spatii, caractere de tabulare, retururi de car

Simboluri speciale: ( ) +- _ * / & ^ % $ # @ ! ; : " ' [ ] ? / < > !

Structura propozitiilor limbajului PL/SQL

Fiecare propozitie a unui text PL/SQL este structurata pentru a fi mai usor lizibila si pentru a asigura respectarea sintaxei PL/SQL. Ca exemplu, sa analizam instructiunea urmatoare:

SELECT nume_articol FROM lst_articole WHERE pret_articol >= (cost_art*2.5);

-- numele articolelor cu valoare maxima

Aceasta propozitie PL/SQL contine urmatoarele:

Simboluri    - Simbolurile * si >= au semnificatii predefinite în limbajul PL/SQL

Etichete si identificatori - nume_articol, lst_articole, pret_articol si cost_art sunt numele unor obiecte ale programului sau ale bazei de date.'

Expresii literale    - 2 . 5 este o expresie literala

Comentarii    - Tot ce urmeaza dupa indicatorul de comentariu (--) este considerat comentariu

Fiti precaut atunci când folositi cuvintele rezervate ale limbajului PL/SQL. De exemplu, în instructiunea urmatoare este folosit incorect un cuvânt rezervat al limbajului PL/SQL:'

DECLARE values

NUMBER

Cuvântul rezervat values nu poate fi folosit într-o declaratie. Toate cuvintele rezervate au o semnificatie sintactica predefinita si nu pot fi redefinite.

Comentarii

Comentariile reprezinta o parte foarte importanta a unui program. Ele asigura lizibilitatea si inteligibilitatea programului. Comentariile sunt destinate oamenilor, nu calculatoarelor. Programul Oracle ignora comentariile. Ele se afla acolo numai pentru dumneavoastra.

Comentariul mono-linie începe cu o dubla cratima (--). Acest indicator de comentariu poate sa apara oriunde într-o linie si marcheaza drept comentariu tot ce urmeaza pâna la sfârsitul liniei respective. Iata un exemplu de comentarii mono-linie:

DECLARE

descriere_articol VARCHAR2(50) - numele generic al articolului -- începe procesarea

SELECT

Comentariile multi-linie încep cu /* si se termina cu * /. Aceste comentarii se pot întinde pe mai multe linii.

În exemplul urmator, este ilustrat un comentariu multi-linie:

/* Selecteaza numele articolelor cu valoare ridicata folosind pretul de cost înmultit cu un coeficient Daca doriti sa utilizati metoda WIP pentru calculul valorii articolelor, folositi tabelul lst_inventar */

SELECT nume_articol FROM lst_articole WHERE pret_articol >= (cost art*2. 5) ;

Utilizarea comentariilor face obiectul urmatoarelor restrictii:

Comentariile nu pot fi imbricate

Nu pot fi folosite comentarii mono-linie daca blocul urmeaza sa fie procesat dinamic de un program de precompilare

Tipuri de date

în limbajul PL/SQL, la crearea variabilelor si constantelor, acestora trebuie sa li se declare tipul. Tipul specifica formatul de memorare, restrictiile si un domeniu valid de valori, în lista urmatoare sunt enumerate tipurile de date ale limbajului PL/SQL:

Tipuri scalare:

binary_integer

dec

decimal double precision

float

int

integer

string

natural number

numeric

positive

real

smallint

char

character

long

long raw

raw

rowid

string

varchar

varchar2

date

boolean

Tipuri compuse:

Record

table

Tipurile scalare nu au componente interne, în timp ce tipurile compuse au componente interne pe care le puteti manipula. Tipurile scalare sunt similare tipurilor SQL. Consultati Capitolul 4, "Tipuri de date", pentru o descriere a tipurilor scalare.

Limbajul PL/SQL prevede doua tipuri compuse: table si record. Tipul record este pentru a accesa liniile tabelelor ca pe niste matrice. Tipul table este asemanator, dar nu identic cu o baza de date.

Tipul record este asemanator cu o înregistrare a unui tabel cu exceptia faptului ca numele coloanelor sunt proprii fiecarei înregistrari.

Încapsularea blocurilor PL/SQL în programe scrise în alt limbaj

Oracle va permite sa încapsulati blocuri PL/SQL în programe scrise în oricare dintre urmatoarele limbaje: C, COBOL, FORTRAN, Ada, Pascal si PL/I. Dupa ce scrieti programul în oricare dintre aceste limbaje, trebuie sa precompilati codul sursa. Prin precompilare sunt detectate erorile si este generat un fisier continând codul sursa modificat, care poate fi compilat, legat si executat.

Pentru a încapsula un bloc PL/SQL în programul dumneavoastra, trebuie sa precedati blocul cu instructiunea exec SQL execute. Blocul PL/SQL trebuie sa se termine cu instructiunea end-exec. Exemplul urmator ilustreaza sintaxa pentru încapsularea unui bloc PL/SQL într-un limbaj de nivel înalt:

exec SQL execute

begin

end

end-exec

Folositi variabilele programului gazda pentru a transfera valori în ambele sensuri între programul sursa si blocul PL/SQL. Domeniul variabilelor declarate în interiorul blocului PL/SQL este global.

Toate referirile la variabilele programului gazda care apar într-un bloc PL/SQL trebuie prefatate cu semnul doua puncte (:). Aceasta notatie ajuta precompilatorul sa faca distinctia între variabilele programului gazda si variabilele blocului PL/SQL.

Oracle va permite sa folositi o variabila indicator facultativa atunci când faceti referire la o variabila a programului gazda. Aceasta variabila indicator este o variabila întreaga care indica valoarea sau starea unei variabile gazda. Variabila indicator este folosita pentru detectarea valorilor nule, pentru trunchierea variabilelor gazda returnate si pentru a atribui valori nule variabilelor de intrare.

Pentru variabilele de iesire, variabilei indicator îi pot fi atribuite urmatoarele valori:

Indica programului gazda faptul ca valoarea variabilei este nula. Evident, programul gazda trebuie sa posede rutine adecvate pentru detectarea situatiilor de acest gen.

Oracle returneaza programului gazda valoarea variabilei fara modificari.

> 0

Oracle atribuie o valoare trunchiata variabilei gazda.

Pentru variabilele de intrare, variabilei indicator îi pot fi atribuite urmatoarele valori:

Oracle ignora valoare variabilei gazda si îi atribuie valoarea nula.

>= 0

Oracle accepta valoarea variabilei gazda fara modificari.

Variabila indicator trebuie declarata ca întreg de doi octeti. La utilizarea într-o instructiune SQL, variabila trebuie prefatata cu (:) si adaugata variabilei gazda.

/* Urmeaza un bloc PL/SQL */

EXEC SQL EXECUTE

BEGIN

SELECT cant_articol, pret_articol, nume_articol

INTO :cant_art, :cant__ind, :pret_art, :nume_art

FROM lis_articole;

END;

end-exec

/* Urmeaza rutina programului gazda */

if cant_ind = -1

then

else

Erori PL/SQL

Serverul Oracle si motorul PL/SQL genereaza un mesaj de eroare la fiecare eroare de executie sau defectare a echipamentelor. Formatul mesajului de eroare PL/SQL este

PLS-00000 mesaj de eroare

Codul de eroare este prefatat de literele PLS si este urmat de un numar unic. Cu ajutorul acestui numar, puteti gasi definitia erorii, fie în manualul utilizatorului PL/SQL, fie în manualul de mesaje si coduri al sistemului Oracle, în aceste manuale, gasiti lista completa a mesajelor si codurilor de eroare. Iata un mesaj de eroare PL/SQL pe care 1-ati putea întâlni:'

PLS-00111 end-of-file in comment

Asemeni majoritatii limbajelor de programare, un program PL/SQL îsi înceteaza de obicei executia la detectarea unei erori interne de executie, cu exceptia cazului în care utilizati caracteristicile de tratare a exceptiilor ale programului PL/SQL. în acest caz, programul nu trebuie sa-si înceteze executia atunci când survine o eroare. Puteti include rutine care sa trateze erorile astfel încât procesarea sa continue si dupa detectarea erorilor de executie.

Limbajul PL/SQL permite utilizatorului sa-si defineasca propriile exceptii. Aceste exceptii definite de utilizator trebuie sa fie declarate si trebuie generate în mod explicit cu comanda raise.

Pentru informatii suplimentare în legatura cu mecanismul PL/SQL de tratare a exceptiilor, consultati Capitolul 36, "Tratarea exceptiilor de executie în limbajul PL/SQL".

Utilitarul PL/SQL Wrapper

Într-o aplicatie client-server, se întâmpla deseori ca unele blocuri PL/SQL sa se gaseasca atât în partea de aplicatie rezidente în server cât si în cea rezidenta la client. Pentru a proteja portiunea aplicatiei rezidenta la client, programul Oracle permite scrierea blocurilor PL/SQL în format binar, protejând astfel codul sursa împotriva modificarii si a utilizarii gresite.

Rezumat

Limbajul PL/SQL reprezinta extensia procedurala a limbajului SQL al programului Oracle. Aceasta extensie permite programatorilor sa încorporeze functii, proceduri, cursoare si rutine de tratare a exceptiilor în instructiuni procedurale grupate din punct de vedere logic.

Limbajul PL/SQL prezinta numeroase avantaje atât pentru programatori, cât si pentru utilizatori. Printre acestea se numara si reducerea traficului în retea deoarece limbajul PL/SQL va permite sa procesati un întreg bloc de instructiuni odata în loc sa transmiteti serverului instructiunile individuale, una câte una.

În acest capitol, au fost prezentate diversele aspecte legate de crearea blocurilor de instructiuni PL/SQL. De asemenea, a fost prezentat mediul în care opereaza si cu care interactioneaza limbajul PL/SQL.


Document Info


Accesari: 4464
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )