CATEGORII DOCUMENTE |
PL/SQL
Concepte generale
Procedural Language/Structured Query Language (PL/SQL) este extensia procedurala a limbajului SQL.
PL/SQL este un limbaj de programare sofisticat care asigura accesarea datelor unei baze de date relationale orientate obiect si permite gruparea unei multimi de comenzi intr-un bloc unic de tratare a datelor. Programul este format din unul sau mai multe blocuri care pot contine blocuri incuibarite.
PL/SQL include atat instructiuni SQL pentru manipularea datelor si pentru gestiunea tranzactiilor, cat si instructiuni proprii. Limbajul combina constructiile procedurale ale unui limbaj LG3 cu puterea si flexibilitatea lui SQL (LG4). Combinatia a generat un limbaj puternic pentru modelarea aplicatiilor complexe.
PL/SQL extinde SQL prin constructii specifice limbajelor procedurale (definirea variabilelor, declararea tipurilor, utilizarea structurilor de control, implementarea procedurilor si functiilor, introducerea tipurilor obiect si metodelor etc.). PL/SQL ofera posibilitati moderne de tratare a informatiei: incapsularea datelor, analiza speciala a erorilor, mascarea informatiei, orientarea obiect. Posibilitatile lui SQL sunt folosite pentru un acces rafinat la date, iar facilitatile oferite de PL/SQL sunt folosite pentru fluxul controlului procesarii datelor.
Dintre functionalitatile limbajului PL/SQL care determina ca acesta sa fie frecvent utilizat se remarca urmatoarele facilitati:
integrarea comenzilor SQL de baza;
integrarea cu server-ul Oracle si cu utilitare Oracle;
oferirea unui suport pentru programarea orientata obiect;
asigurarea securitatii informatiei;
definirea si gestiunea blocurilor de instructiuni;
gestiunea variabilelor, constantelor si a cursoarelor;
modularizarea programelor (subprograme, pachete);
implementarea si utilizarea declansatorilor;
utilizarea structurilor de control fundamentale;
detectarea si gestiunea erorilor de executie si a situatiilor exceptionale;
dezvoltarea de aplicatii Web.
PL/SQL este o tehnologie utilizata de server-ul Oracle si de anumite utilitare Oracle. Blocurile PL/SQL sunt transmise unui motor PL/SQL si procesate (compilate si executate) de acesta. Motorul PL/SQL poate sa se afle pe server-ul Oracle sau intr-un utilitar, iar utilizarea sa depinde de unde se invoca PL/SQL. Multe utilitare Oracle (inclusiv Developer/2000) au propriul lor motor PL/SQL care este independent de motorul prezent pe server-ul Oracle.
Blocurile PL/SQL pot fi executate pe statia client fara interactiune cu server-ul sau in intregime pe server. Cand blocurile PL/SQL sunt referite dintr-un program PRO*, din iSQL*Plus, sau de catre Server Manager, motorul PL/SQL de pe server-ul Oracle va procesa aceste blocuri. Acesta descompune blocul in instructiuni SQL si le trimite executorului de instructiuni SQL (SQL Statement Executor) de pe server-ul Oracle. Fara PL/SQL, instructiunile SQL ar fi procesate separat, fiecare la un moment dat, fiecare implicand un apel la server-ul Oracle
Restul comenzilor (procedurale) sunt procesate de catre executorul instructiunilor procedurale (PSE - Procedural Statement Executor) care este in motorul PL/SQL. PSE poate procesa datele care sunt locale aplicatiei, reducandu-se astfel activitatea de transfer spre server-ul Oracle si numarul de cursoare solicitate. In felul acesta, este necesar un singur transfer pentru a trimite blocul din aplicatie catre server.
O aplicatie baza de date poate fi structurata in trei parti:
interfata utilizator (utilizatorul introduce anumite informatii si obtine niste rezultate in urma executarii aplicatiei);
aplicatia logica efectiva;
baza de date.
Exista doua modele pentru proiectarea unei aplicatii baza de date:
modelul client-server (two-tier);
modelul three-tier.
Multe dintre aplicatiile baze de date sunt construite folosind modelul clasic client-server, descris succint anterior pentru PL/SQL. Modelul este caracterizat de cele doua componente: client si server. Client-ul manuieste interfata, iar server-ul contine baza de date. Aplicatia logica este scindata intre client si server. De remarcat aceasta caracteristica fundamentala a modelului ca aplicatia comunica direct cu server-ul. Exista un motor PL/SQL pe server, iar in anumite cazuri si pe client.
Daca motorul PL/SQL este pe server, atunci aplicatia (care poate fi scrisa in Pro*C, JDBC, OCI sau alte limbaje) care rezida pe client trimite cereri la un server de date. Cererile sunt rezolvate utilizand SQL. Diferite cereri SQL pot fi grupate intr-un bloc PL/SQL si trimise ca o singura entitate server-ului.
Vom considera un scenariu in care exista doua motoare PL/SQL, unul pe statia client (local) si un motor PL/SQL pe server. De exemplu, un declansator ce se executa pe statia client si care apeleaza un subprogram stocat in baza de date. In acest caz, blocurile anonime sunt trimise motorului PL/SQL de pe statia client, care proceseaza local comenzile procedurale. Comenzile neprocedurale din interiorul blocului sunt trimise executorului de instructiuni SQL de pe server. De asemenea, apelurile procedurilor care sunt stocate pe server sunt trimise tot motorului de pe server pentru procesare.
Un mecanism similar este folosit pentru comunicarea dintre motoare PL/SQL care sunt pe diferite server-e, dar in acest caz, obiectele PL/SQL din diferite motoare pot sa depinda unul de altul.
In modelul three-tier interfata utilizator, aplicatia logica si baza de date sunt scindate in trei parti separate:
Client Browser
Application Server (Oracle Internet Application Server - IAS)
Oracle Database Server.
Clientul (cel mai frecvent un browser) apeleaza subprograme care genereaza ca rezultat pagini HTML, iar Application Server proceseaza solicitarile. In Oracle9i, aplicatiile Forms si Reports se executa numai ca parte a unui model three-tier. De exemplu, Oracle Web Forms permite desfasurarea unei aplicatii intr-un mediu multi-tier Internet fara a modifica o linie de cod.
In general, comenzile SQL si PL/SQL sunt trimise server-ului pentru a fi executate. Pentru a realiza acest lucru, trebuie stabilita conectarea la BD. Aceasta presupune ca baza sa autentifice utilizatorul (parola si identificator). PL/SQL nu contine o sintaxa pentru realizarea conectari la baza de date. Conectarea poate fi realizata de alte componente ale sistemului (de exemplu, iSQL*Plus).
PL/SQL are un rol important atat la nivelul server-ului Oracle (prin subprograme stocate, declansatori si pachete), cat si la nivelul utilitarelor Oracle (de exemplu, Developer/2000 - componenta declansatori). Partea procedurala este atat la nivel de client, cat si la nivel de server. Cererile insa nu se executa pe statii client, ci numai pe server.
Cu toate ca au aceeasi structura generala, procedurile si functiile declarate ca o parte a aplicatiei Developer/2000 sunt diferite de cele stocate in baza de date. Subprogramele stocate sunt obiecte si sunt depuse in DD, putand fi accesate de un numar arbitrar de aplicatii, inclusiv de aplicatii Developer/2000.
PL/SQL constituie fundamentul pentru realizarea diverselor aplicatii:
fisiere iSQL*Plus (script file);
proceduri si functii stocate (stored procedure): o procedura sau o functie stocata este un subprogram PL/SQL care poate fi invocat de o aplicatie client, un declansator BD sau un declansator aplicatie;
declansatori baza de date (database trigger): un declansator baza de date este un bloc PL/SQL care se executa la aparitia unui eveniment (modificarea unui tabel al bazei, modificarea unei vizualizari, anumite actiuni sistem sau chiar anumite actiuni ale utilizatorului);
pachete (package): un pachet este un bloc PL/SQL care incapsuleaza intr-o unitate logica in baza de date o multime de proceduri, functii, variabile, constante, tipuri, cursoare si exceptii;
declansatori aplicatie (application trigger): un declansator aplicatie este un bloc PL/SQL care se executa in urma unui eveniment provocat de sistem. Aplicatiile Oracle (Oracle Forms si Oracle Reports) sunt dotate cu motoare PL/SQL care permit construirea acestor declansatori.
Referitor la portabilitatea limbajului, pot fi remarcate doua aspecte.
Aplicatiile PL/SQL se pot executa pe orice platforma sau sistem de operare pe care poate fi executat Oracle.
PL/SQL permite transfer de cod intre server-ul Oracle si aplicatii. Pot fi scrise pachete program portabile si crea biblioteci ce pot fi utilizate in diferite situatii, de diverse aplicatii.
Pentru Oracle8, cele mai spectaculoase realizari sunt legate de:
introducerea tipurilor obiect si a metodelor,
definirea tipului colectie (tabele imbricate si vectori),
definirea si accesarea rutinelor externe,
utilizarea tipurilor LOB.
Dintre performantele versiunii Oracle8i se pot aminti: rutine externe Java, tranzactii autonome, operatii bulk bind, SQL dinamic nativ.
Dintre noutatile oferite de versiunea Oracle9i se remarca:
posibilitatea ca PL/SQL sa suporte sintaxa completa a comenzilor SQL;
introducerea de pachete predefinite (pentru dezvoltare de aplicatii, pentru gestionarea accesului la baze de date distribuite etc.) care ofera functionalitati speciale legate de noile caracteristici ale versiunii;
compilarea nativa a codului PL/SQL
extinderea posibilitatilor oferite de structura bulk bind si imbinarea acestei structuri cu facilitatile oferite de SQL dinamic;
scrierea rapida de aplicatii C++ care au acces la un server Oracle, folosind o interfata API (Application Programming Interface), numita Oracle C++ Call Interface (OCCI);
introducerea de comenzi si expresii CASE;
folosirea unor noi tipuri de date in SQL si PL/SQL (DATATIME, TIMESTAMP, colectii pe mai multe niveluri);
introducera ierarhiilor de tipuri si subtipuri;
definirea functiilor tabel;
definirea expresiilor cursor;
depunerea si executarea claselor Java in baza de date, la fel ca procedurile stocate si declansatorii;
dezvoltarea de aplicatii Web utilizand PL/SQL.
Procedurile PL/SQL se executa mai rapid prin compilarea lor intr-un cod nativ. Procedurile sunt translatate in cod C, compilate cu ajutorul unui compilator C si apoi automat preluate in procese Oracle. Aceasta tehnica, care nu cere restaurarea bazei de date poate fi utilizata pentru proceduri si pachete Oracle.
Oracle furnizeaza solutii (interfete client-side si server-side, utilitare, JVM integrata cu server-ul Oracle9i) dezvoltatorilor de aplicatii pentru crearea, gestionarea si exploatarea aplicatiilor Java.
Proceduri 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 doua interfete (API): JDBC si SQLJ. Astfel:
pentru a invoca o procedura Java din SQL este nevoie de interfata 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 carui coloane sunt cunoscute) dintr-un obiect Java este folosit SQLJ.
PL/SQL ofera facilitati care permit utilizarea Web-ului de catre baze de date si invers, face ca datele din baza de date sa fie accesibile interactiv diferitilor utilizatori intranet. Aplicatiile Web scrise in PL/SQL sunt de fapt proceduri stocate care interactioneaza cu un Web browser printr-un protocol HTTP.
Pentru dezvoltarea de aplicatii Web cu PL/SQL se impun cateva probleme.
Cum se genereaza un rezultat HTML din PL/SQL
Cum se pot trimite parametri unei aplicatii Web?
Cum se pot executa operatii Web (trimiterea unui mail, gasirea adresei unei gazde etc.) cu ajutorul procedurilor stocate PL/SQL
Cum se poate include cod PL/SQL in pagini Web?
Sistemul furnizeaza o clasa de pachete predefinite care usureaza dezvoltarea aplicatiilor Web. De exemplu, pentru a trimite un mail dintr-un program PL/SQL sau dintr-o procedura stocata se utilizeaza pachetul UTL_SMTP, iar pentru a gasi numele unei gazde locale sau distante a carei adresa este cunoscuta sau pentru a gasi adresa unei gazde careia i se cunoaste numele poate fi utilizat pachetul UTL_INADDR. Pachetele pot fi folosite impreuna cu Oracle Internet Application Server si WebDB. In felul acesta, poate fi formatat rezultatul unei cereri intr-un tabel HTML, se pot combina operatii Web tipice cu un program PL/SQL etc.
PL/SQL Server Pages (PSP) permite crearea de pagini Web dinamic. Se executa dinamic operatii asupra bazei de date si se includ dinamic rezultatele unei interogari in pagini Web. Folosind elemente speciale (tag) se pot insera script-uri PL/SQL in codul sursa HTML. Aceste script-uri se executa cand paginile sunt solicitate de clienti Web. Script-ul poate accesa parametri, filtra sau reactualiza baza de date.
Pentru a include codul PL/SQL in pagini Web trebuie:
aleasa o configuratie software,
scris cod pentru PSP (se creeaza dinamic pagini Web care fac operatii asupra bazei de date),
incarcate fisierele PSP in baza de date (ca proceduri stocate) si executate.
O aplicatie Web PL/SQL trebuie sa accepte date in format XML sau sa furnizeze rezultate in format XML. Documentul XML poate fi procesat ca un document compus depus intr-un LOB sau ca un document descompus (fragmente de documente) depus in tabele relationale.
Bibliografie
Programare avansata in Oracle9i, Ed.Tehnica 2004, I.Popescu, A. Alecu, L. Velcescu, G. Florea.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1410
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved