{"id":240,"date":"2025-02-03T15:55:20","date_gmt":"2025-02-03T13:55:20","guid":{"rendered":"https:\/\/eugo.ro\/?p=240"},"modified":"2025-06-21T20:49:33","modified_gmt":"2025-06-21T17:49:33","slug":"pl-sql-concepte-generale","status":"publish","type":"post","link":"https:\/\/eugo.ro\/?p=240","title":{"rendered":"PL\/SQL \u2013 CONCEPTE GENERALE"},"content":{"rendered":"<p>&nbsp;<\/p>\n<p><em>Procedural Language\/Structured Query Language (PL\/SQL)<\/em> este extensia <strong>procedurala<\/strong> a limbajului SQL.<\/p>\n<p><em>PL\/SQL<\/em> este un limbaj de programare sofisticat care asigur\u0103 accesarea datelor unei baze de date rela\u0163ionale orientate obiect \u015fi permite gruparea unei mul\u0163imi de comenzi \u00eentr-un bloc unic de tratare a datelor. Programul este format din unul sau mai multe blocuri care pot con\u0163ine blocuri \u00eencuib\u0103rite.<\/p>\n<p><em>PL\/SQL<\/em> include at\u00e2t instruc\u0163iuni <em>SQL<\/em> pentru manipularea datelor \u015fi pentru gestiunea tranzac\u0163iilor, c\u00e2t \u015fi instruc\u0163iuni proprii. Limbajul combin\u0103 construc\u0163iile procedurale ale unui limbaj <em>LG3<\/em> cu puterea \u015fi flexibilitatea lui <em>SQL (LG4).<\/em><br \/>\nCombina\u0163ia a generat un limbaj puternic pentru modelarea aplica\u0163iilor complexe.<\/p>\n<p><em>PL\/SQL<\/em> extinde <em>SQL<\/em> prin construc\u0163ii specifice limbajelor procedurale (definirea variabilelor, declararea tipurilor, utilizarea structurilor de control, implementarea procedurilor \u015fi func\u0163iilor, introducerea tipurilor obiect \u015fi metodelor<br \/>\netc.). <em>PL\/SQL<\/em> ofer\u0103 posibilit\u0103\u0163i moderne de tratare a informa\u0163iei: \u00eencapsularea datelor, analiza special\u0103 a erorilor, mascarea informa\u0163iei, orientarea obiect. Posibilit\u0103\u0163ile lui <em>SQL<\/em> sunt folosite pentru un acces rafinat la date, iar facilit\u0103\u0163ile oferite de <em>PL\/SQL<\/em> sunt folosite pentru fluxul controlului proces\u0103rii datelor.<\/p>\n<p>Dintre func\u0163ionalit\u0103\u0163ile limbajului PL\/SQL care determin\u0103 ca acesta s\u0103 fie frecvent utilizat se remarc\u0103 urm\u0103toarele facilit\u0103\u0163i:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>integrarea comenzilor SQL de baz\u0103;<\/li>\n<li>integrarea cu server-ul Oracle \u015fi cu utilitare Oracle;<\/li>\n<li>oferirea unui suport pentru programarea orientat\u0103 obiect;<\/li>\n<li>asigurarea securit\u0103\u0163ii informa\u0163iei;<\/li>\n<li>definirea \u015fi gestiunea blocurilor de instruc\u0163iuni;<\/li>\n<li>gestiunea variabilelor, constantelor \u015fi a cursoarelor;<\/li>\n<li>modularizarea programelor (subprograme, pachete);<\/li>\n<li>implementarea \u015fi utilizarea declan\u015fatorilor;<\/li>\n<li>utilizarea structurilor de control fundamentale;<\/li>\n<li>detectarea \u015fi gestiunea erorilor de execu\u0163ie \u015fi a situa\u0163iilor excep\u0163ionale;<\/li>\n<li>dezvoltarea de aplica\u0163ii Web<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><em>PL\/SQL<\/em> este o tehnologie utilizat\u0103 de <em>server-ul Oracle<\/em> \u015fi de anumite utilitare <em>Oracle<\/em>. Blocurile <em>PL\/SQL<\/em> sunt transmise unui <strong>motor <em>PL\/SQL<\/em><\/strong> \u015fi procesate (compilate \u015fi executate) de acesta. Motorul <em>PL\/SQL<\/em> poate s\u0103 se afle pe server-ul <em>Oracle<\/em> sau \u00eentr-un utilitar, iar utilizarea sa depinde de unde se invoc\u0103 <em>PL\/SQL.<\/em> Multe utilitare <em>Oracle<\/em> (inclusiv Developer\/2000) au propriul lor motor<em> PL\/SQL<\/em> care este independent de motorul prezent pe server-ul <em>Oracle<\/em>.<\/p>\n<p>Blocurile <em>PL\/SQL<\/em> pot fi executate pe sta\u0163ia client f\u0103r\u0103 interac\u0163iune cu server-ul sau \u00een \u00eentregime pe server. C\u00e2nd blocurile <em>PL\/SQL<\/em> sunt referite dintr-un program PRO*, din iSQL*Plus, sau de c\u0103tre Server Manager, motorul <em>PL\/SQL<\/em> de pe server-ul <em>Oracle<\/em> va procesa aceste blocuri. Acesta descompune blocul \u00een instruc\u0163iuni <em>SQL<\/em> \u015fi le trimite executorului de instruc\u0163iuni <em>SQL (SQL Statement Executor)<\/em> de pe server-ul <em>Oracle<\/em>. F\u0103r\u0103 <em>PL\/SQL<\/em>, instruc\u0163iunile <em>SQL<\/em> ar fi procesate separat, fiecare la un moment dat, fiecare implic\u00e2nd un apel la server-ul <em>Oracle.<\/em><\/p>\n<p>Restul comenzilor (procedurale) sunt procesate de c\u0103tre executorul instruc\u0163iunilor procedurale <em>(PSE \u2013 Procedural Statement Executor)<\/em> care este \u00een motorul <em>PL\/SQL<\/em>. <em>PSE<\/em> poate procesa datele care sunt locale aplica\u0163iei, reduc\u00e2ndu-se astfel activitatea de transfer spre server-ul <em>Oracle<\/em> \u015fi num\u0103rul de cursoare solicitate. \u00cen felul acesta, este necesar un singur transfer pentru a trimite blocul din aplica\u0163ie c\u0103tre server.<\/p>\n<p>O aplica\u0163ie baz\u0103 de date poate fi structurat\u0103 \u00een trei p\u0103r\u0163i:<\/p>\n<ul>\n<li>interfa\u0163a utilizator (utilizatorul introduce anumite informa\u0163ii \u015fi ob\u0163ine ni\u015fte rezultate \u00een urma execut\u0103rii aplica\u0163iei);<\/li>\n<li>aplica\u0163ia logic\u0103 efectiv\u0103;<\/li>\n<li>baza de date.<\/li>\n<\/ul>\n<p>Exist\u0103 dou\u0103 modele pentru proiectarea unei aplica\u0163ii baz\u0103 de date:<\/p>\n<ul>\n<li>modelul client-server (two-tier);<\/li>\n<li>modelul three-tier.<\/li>\n<\/ul>\n<p>Multe dintre aplica\u0163iile baze de date sunt construite folosind modelul clasic client-server, descris succint anterior pentru <em>PL\/SQL<\/em>. Modelul este caracterizat de cele dou\u0103 componente: client \u015fi server. Client-ul m\u00e2nuie\u015fte interfa\u0163a, iar server-ul con\u0163ine baza de date. Aplica\u0163ia logic\u0103 este scindat\u0103 \u00eentre client \u015fi server. De remarcat aceast\u0103 caracteristic\u0103 fundamental\u0103 a modelului c\u0103 aplica\u0163ia comunic\u0103 direct cu server-ul. Exist\u0103 un motor <em>PL\/SQL<\/em> pe server, iar \u00een anumite cazuri \u015fi pe client.<\/p>\n<p>Dac\u0103 motorul <em>PL\/SQL<\/em> este pe server, atunci aplica\u0163ia (care poate fi scris\u0103 \u00een Pro*C, JDBC, OCI sau alte limbaje) care rezid\u0103 pe client trimite cereri la un server de date. Cererile sunt rezolvate utiliz\u00e2nd <em>SQL.<\/em> Diferite cereri <em>SQL<\/em> pot fi grupate<br \/>\n\u00eentr-un bloc <em>PL\/SQL<\/em> \u015fi trimise ca o singur\u0103 entitate server-ului.<\/p>\n<p>Vom considera un scenariu \u00een care exist\u0103 dou\u0103 motoare <em>PL\/SQL<\/em>, unul pe sta\u0163ia client (local) \u015fi un motor <em>PL\/SQL<\/em> pe server. De exemplu, un declan\u015fator ce se execut\u0103 pe sta\u0163ia client \u015fi care apeleaz\u0103 un subprogram stocat \u00een baza de date. \u00cen<br \/>\nacest caz, blocurile anonime sunt trimise motorului <em>PL\/SQL<\/em> de pe sta\u0163ia client, care proceseaz\u0103 local comenzile procedurale. Comenzile neprocedurale din interiorul blocului sunt trimise executorului de instruc\u0163iuni <em>SQL<\/em> de pe server. De asemenea, apelurile procedurilor care sunt stocate pe server sunt trimise tot motorului de pe server pentru procesare.<br \/>\n<!-- Default Statcounter code for eugo.ro\nhttps:\/\/www.eugo.ro --><br \/>\n<script type=\"text\/javascript\">\nvar sc_project=5241295; \nvar sc_invisible=1; \nvar sc_security=\"f184e0a9\"; \n<\/script><br \/>\n<script type=\"text\/javascript\"\nsrc=\"https:\/\/www.statcounter.com\/counter\/counter.js\"\nasync><\/script><br \/>\n<noscript><\/p>\n<div class=\"statcounter\"><a title=\"Web Analytics\"\nhref=\"https:\/\/statcounter.com\/\" target=\"_blank\"><img\nclass=\"statcounter\"\nsrc=\"https:\/\/c.statcounter.com\/5241295\/0\/f184e0a9\/1\/\"\nalt=\"Web Analytics\"\nreferrerPolicy=\"no-referrer-when-downgrade\"><\/a><\/div>\n<p><\/noscript><br \/>\n<!-- End of Statcounter Code --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp; Procedural Language\/Structured Query Language (PL\/SQL) este extensia procedurala a limbajului SQL. PL\/SQL este un limbaj de programare sofisticat care asigur\u0103 accesarea datelor unei baze de date rela\u0163ionale orientate obiect \u015fi permite gruparea unei mul\u0163imi de comenzi \u00eentr-un bloc unic de tratare a datelor. Programul este format din unul sau mai multe blocuri care pot [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[],"class_list":["post-240","post","type-post","status-publish","format-standard","hentry","category-baze-de-date"],"_links":{"self":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=240"}],"version-history":[{"count":24,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/240\/revisions"}],"predecessor-version":[{"id":570,"href":"https:\/\/eugo.ro\/index.php?rest_route=\/wp\/v2\/posts\/240\/revisions\/570"}],"wp:attachment":[{"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eugo.ro\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}