Extras din proiect
SQL dinamic este o tehnica de programare care permite construirea dinamica a comenzilor la momentul executiei (adica, direct in faza de executie a blocului PL/SQL). Isi dovedeste utilitatea atunci cand dorim sa scriem programe generale, flexibile, folosind operatii de manipulare a datelor (LMD) cum ar fi sisteme ad-hoc de interogare, sau atunci cand scriem programe care utilizeaza comenzi de descriere a datelor adica LDD (Limbaj de Descriere a Datelor). De asemenea se foloseste atunci cand nu stim, la momentul compilarii, textul complet al unei expresii SQL sau numarul ori tipul de date al variabilelor de intrare sau de iesire. De exemplu, se creeaza o procedura care opereaza asupra unui tabel al carui nume este cunoscut doar când se executa procedura.
Ca parte integranta a limbajului SQL, acesta permite folosirea dinamica a comenzilor sale in proceduri stocate sau in blocuri anonime. Spre deosebire de comenzile statice, care nu se schimba in timp real, comenzile dinamice se schimba de la o executie la alta. Comenzile dinamice SQL pot depinde de anumite valori de intrare furnizate de utilizator sau de procesarea realizata in programul aplicatie.
Limbajul PL/SQL ofera doua modalitati de a utiliza SQL dinamic:
• SQL dinamic nativ: este o caracteristica a limbajului PL/SQL pentru construirea si executia de instructiuni SQL dinamic;
• Pachetul DBMS_SQL: un API(Application Programming Interface) pentru construirea, executia si descrierea de structuri SQL dinamic.
Comparatie intre SQL dinamic nativ si pachetul DBMS_SQL
Codul pentru a utiliza SQL dinamic nativ are urmatoarele avantaje fata de pachetul DBMS_SQL :
• este mai usor de utilizat;
• merge semnificativ mai rapid (mai ales atunci cand este optimizat de catre compilator);
• necesita mai putin cod;
• poate incarca liniile direct in inregistrari PL/SQL,
• suporta toate tipurile acceptate de SQL static in PL/SQL, inclusiv tipuri definite de utilizator.
Cu toate acestea, pentru a scrie cod in SQL dinamic nativ, trebuie sa stim la momentul compilarii numarul si tipul de date al variabilelor de intrare si iesire utilizate. Daca nu stim toate acestea la momentul compilarii, trebuie sa utilizam pachetul DBMS_SQL. Mai mult, DBMS_SQL are urmatoarele avantaje:
• suporta comenzi SQL mai mari de 32 KB;
• permite incarcarea inregistrarilor (procedura FETCH_ROWS);
• accepta comenzi cu clauza RETURNING pentru reactualizarea si stergerea de linii multiple;
• suporta posibilitatile oferite de comanda DESCRIBE (procedura DESCRIBE_COLUMNS);
• analizeaza validitatea unei comenzi SQL o singura data (procedura PARSE), permitând ulterior mai multe utilizari ale comenzii pentru diferite multimi de argumente.
Atunci cand sunt necesare atat pachetul DBMS_SQL, cat si SQL dinamic nativ, putem schimba intre ele folosind functia DBMS_SQL.TO_REFCURSOR si DBMS_ SQL.TO_CURSOR_NUMBER.
Cand avem nevoie de SQL dinamic?
In PL/SQL avem nevoie de SQL dinamic atunci cand avem:
• SQL al carui text este necunoscut la momentul compilarii;
De exemplu, un SELECT care contine un identificator care este necunoscut la momentul compilarii (cum ar fi numele unei tabele) sau o clauza WHERE in care numarul de subclauze este necunoscut la momentul compilarii.
Preview document
Conținut arhivă zip
- Sistemul de Gestiune al Bazelor de Date.doc