Download as pdf
Download as pdf
You are on page 1of 81
ee Viad DIACONITA lon LUNGU Anda VELICANU BAZE DE DATE Bye Bea INTRODUCERE iN PL/SQL (PROCEDURAL LANGUAGE EXTENSION TO SQL) L1 Introducere PL/SQL este un limbaj procedural structurat pe bloc, programele putand fi imparfite in blocuri logice, constructiile PL/SQL continand structuri de control procedurale si comenzi descriptive SQL. Blocurile PL/SQL sunt procesate de motorul PL/SQL care poate fi rezident pe serverul ORACLE sau pe un alt instrument de dezvoltare (ex.: Oracle Forms, Reports, JDeveloper etc.). Programarea in PL/SQL este modularizata, in acest sens se utilizeazi blocurile care grupeaza instructiunile. Tipurile de date din SQL pot fi folosite in PL/SQL. Pentru a putea lucra cu limbajul PL/SQL avem nevoie in primul rand de o conexiune la o bazi de date Oracle si de un instrument de dezvoltare prin care si interactionim cu serverul Oracle. Pentru instalarea si configurarea instantei bazei de da date se poate utiliza ghidul electronic pus la dispozitie de catre compania Oracle odata cu kit-ul de instalare. Ca instrument de dezvoltare se poate utiliza SQL*plus care se instaleazi impreund cu instanfa Oracle sau se poate utiliza SQL Developer, un mediu de dezvoltare mai prietenos disponibil gratuit pe site-ul companiei Oracle (www. oracle .com). Schema bazei de date pe care se bazeazi exemplele din aceasta carte se poate vedea in figura 1. Scriptul pentru crearea acestor tabele este redat in Anexa 1 si se poate descirea de pe site-ul http://bd.ase.ro impreuni cu scriptul pentru adiugarea inregistrarilor. Baze de date, Limbajul PL/SQL | Introducere in PL/SQL (Procedural Language Extension to SQL) 11 1.2 Blocuri PL/SQL | Orice unitate PL/SQL contine unul sau mai multe blocuri, complet separate sau imbricate. Fiecare bloc este compus din sectiuni care pot fi obligatorii sau optionale. Componentele unui bloc PL/SQL | Un bloc PL/SQL este compus din pana la 3. sectiuni: declarativa (optionald), executabilé (obligatorie) si de tratare a exceptiilor (optionala). Structura unui bloc PL/SQL poate fi prezentata astfel: DECLARE (Optional) 2 | variabile, cursori, exceptii e BEGIN (Obligatoriu) i g comenzi SQL (asigura accesul la baza de date) z & structuri de programare procedurala PL/SQL 82 3 EXCEPTION (Optional) 2 actiuni ce se executi cfnd apare o eroare 5 END; (Obligatoriu) = z fn cadrul blocului pot aparea instructiuni SQL care asigurai accesul la baza | 3 de date, de exemplu pentru efectuarea unor actualizari, dar operatiile efectuate cu : 3 | variabilele PL/SQL in cadrul instructiunilor procedurale nu presupun accesarea - | bazei de date. 5 3 Observatii: Lt * se foloseste (;) dupa fiecare instructiune SQL sau instructiune de £ control PL/SQL; Se = + blocul PL/SQL se termina cu (;); * comentariile se pot realiza folosind (--) pentru fiecare linie de cod comentata sau (/* */) pentru mai multe linii comentate; * se foloseste (/) pentru a lansa un bloc anonim in bufferul SQL; * — instructiunile nu sunt CASE SENSITIVE. Blocurile PL/SQL pot fi executate 0 singuré dat& (cazul blocurilor anonime), pot fi stocate in baza de date pentru a fi apelate ulterior (cazul funetiilor, Tipe ‘MuweeR IREGIUNE VAnCHAPZa procedurilor si pachetelor stocate) sau pot fi realizate si apelate la nivelul programelor de aplicatii (functii, proceduri, triggeri de aplicatii). in paragrafele DEHN Toc nEGiNE urmatoare ne vom referi pe scurt la fiecare dintre aceste tipuri de blocuri, urménd si le detaliem in capitole separate. 12 Baze de date. Limbajul PL/SQL Blocurile anonime prezintd urmiatoarele caracteristici: * nu sunt stocate in baza de date; * se declara inline, in locul in care se doreste executia lor; * se executé in momentul rularii; Daca dorii si reutilizati un bloc anonim va sféituim s& salvati codul sursi pe hard disk intr-un fisier de tip .sql sau xt. La modul general un bloc PL/SQL anonim poate avea urmittoarea forma: DECLARE eventualele initializari; ~ de exemplu: v_variabila tip_de_date; BEGIN -- instructiuni executabile; EXCEPTION WHEN exceptie THEN actiune; END; / pentru a putea fi ulterior accesate variabilele, adresare lor fiind realizata astfel: eticheta_bloc.variabila DECLARE << eticheta_bloc >> DECLARE BEGIN END eticheta_bloc; END; -- declararea variabilelor se face precizand tipul de date si realizandu-se Blocurile PL/SQL se pot imbrica gi se pot eticheta cu <> Introducere in PL/SQL (Procedural Language Extension to SQL) 13 Proceduri si functii Sunt blocuri PL/SQL care au nume si pot fi stocate la nivelul bazei de date sau la nivel de aplicatie (de exemplu in mediul de dezvoltare Oracle Developer Suite — Forms si Reports). in cazul procedurilor si functiilor sectiunea DECLARE este inlocuita de definitia acesteia prin sintaxa CREATE [or replace] PROCEDURE/FUNCTION (lista parametrilor $i tipul acestora), de exemplu: CREATE [OR REPLACE] PROCEDURE nume > procedura (lista parametri) Is CREATE [OR REPLACE] FUNCTION nume_functie (lista parametri) RETURN tip_data RETURN valoare [EXCEPTION] END; / Pachetele de subprograme sunt utilizate pentru a grupa mai multe proceduri si functii utilizate pentru un anumit tip de prelucrari. Declansatorii pe baza de date sunt blocuri PL/SQL asociate tabelelor (de baz& sau virtuale) si lansate automat in executie cand are loc 0 comanda de manipulare (insert/update/delete). 14 Baze de date. Limbajul PL/SQL Declansatorii de aplicatie sunt blocuri PL/SQL asociate unor evenimente din cadrul aplicatiei (de exemplu: deplasarea mouse-ului, apasarea unui buton) si lansate in executie automat la aparitia acestor evenimente. 13 Utilizarea operatorilor si functiilor in PL/SQL Operatorii utilizagi In cadrul blocurilor PL/SQL se pot utiliza aceiasi operatori ca gi in cazul limbajului SQL. In plus fafa de acestia apare operatorul de atribuire (: | Operator Caracteristici +5%4, ** (op. Operatori aritmetici exponential) AND, OR, NOT Operatori logici | _S>=>5< numeric gi caracter <->data. Pentru conversii explicite se utilizeaza funcfiile TO_DATE, TO_NUMBER, TO_CHAR in mod aseminator cu limbajul sau. Afisarea pe ecran a valorilor variabilelor sau a mesajelor in PL/SQL se realizeazi prin apelarea functiilor PUT LINE sau PUT din pachetul standard DBMS_OUTPUT. Aceste doua functii primesc ca parametru un sir de caractere gi- | afigeazi. Diferenta dintre cele doua functii este aceea c& prima afiseazi mesajul dupa care trece la linia urmitoare, iar cea de a doua afigeazi mesajul pe linia curent, Functiile PUT_LINE si PUT sunt necesare deoarece nu putem accesa variabilele declarate in blocurile PL/SQL direct din mediul SQL (pentru a le afiga cu PROMPT). in unele medii de dezvoltare, ca de exemplu in SQL*Plus, trebuie utilizata la inceputul sesiunii comanda SET SERVEROUTPUT ON care activeazi bufferul pentru afisare. SET SERVEROUTPUT ON DBMS_OUTPUT.PUT_LINE ('... DBMS_OUTPUT.PUT ( END; 1 De exemplu, vom realiza un bloc PL/SQL care si afigeze un mesaj. Pentru a executa blocul utilizim mediul de dezvoltare SQL Developer. Mai intai este hecesara stabilirea conexiunii cu serverul Oracle: click dreapta pe eticheta Connections din stanga ecranului si completim detaliile referitoare la conexiune: ume utilizator si parola, adresa IP a serverului si portul, numele instantei bazei de date, , Introducere in PL/SQL (Procedural Language Extension to SQL) 17 4 oa Oza TY TEESE ea Mow tore het Sapce Ys Bhratin Tee ep o (St Yew Honote Bin Saye Verney Mein Toe BO G58a 9 xem 0-0-5. Goa 9° kam 0-0-5. — : vss ‘ et 1 Oe Baze de date. Limbajul PL/SQL = 9 4 [pi omor.ror unm (tesbeat USL ete taba) precedes ee he [Prfenas sort one, WQerpan|fprniace | owns cam | Cov cape eae crew et ap sept mh ene om ab) proce! cenit comune tet secs DECI, ECU, 96 TATA A ecEEIOR | Figura 2 Executia blocurilor PL/SQL in SQL. Developer Figura 1 Realizarea conexiunii cu serverul Oracle Codul sursa al blocului este redat mai jos: SET SERVEROUTPUT ON Dupi conectare apare fereastra in care putem serie si executa blocurile, in ~-INTRODUCEM COMENTARII: in acest caz sectiunea mod asemanator cu modul de lucru cu instructiunile SQL. Pentru executia a ¢ DECLARE lipsegte blocurilor se da click pe unul dintre butoanele Execute Statement (F9) sau Run --blocul afigeaz& un mesaj Script (F5). BEGIN DBMS_OUTPUT.PUT_LINE ('Limbajul PL/SQL este un limbaj procedural!') ; DBMS_OUTPUT.PUT_LINE('Un bloc PL/SQL contine trei seciuni: DECLARATIVA, EXECUTABILA, DE TRATARE A EXCEPTIILOR') ; END; / Baze de date. Limbajul PL/SQL ~S Exercitii propuse 1. Recapitulati notiunile de baz ale limbajului SQL, precum si comenzile utilizate. 2. Creati o conexiune noua in SQL Developer si testati programul clasic Hello World! VARIABILE PL/SQL IL1 Declarare si initializare Declararea variabilelor se realizeazi in zona declarativa delimitata prin DECLARE a blocului sau sub-blocului. Initializarea variabilelor se poate face la declarare sau in zona de executie intre BEGIN si END. Variabilele vor fi vizibile si in blocurile imbricate, incluse in el, mai putin in sub-blocurile in care numele lor este redefinit, la fel ca in cazul limbajelor de Programare structurate, unde semnificatia unui nume definit de utilizator intr-un bloc/sub-bloc este data de cea mai apropiata declaratie anterioara locului folosirii. La declararea variabilelor PL/SQL se precizeaza obligatoriu tipul de dat si optional anumite restrictii si un sir valid de valori. Declararea si initializarea se realizeaza astfel: nume_variabila [CONSTANT] TIP_DATA [NOT NULL] [:= | DEFAULT expresie]; Constantele in PL/SQL trebuie obligatoriu initializate, iar ulterior nu isi vor putea schimba valoarea. Variabilele pentru care se precizeaza restrictia NOT NULL trebuie obligatoriu initializate, iar ulterior nu vor putea primi valoarea NULL. Pentru a putea urmari mai usor codul sursi se foloseste urmatoarea conventie de notare: ¢_nume Constanta - pentru declararea constantelor; v_nume Variabila - pentru declararea variabilelor; _nume Variabila_globala —pentru variabilele globale definite in zona de specificatii a unui pachet de subprograme si valabile pentru toate procedurile si functiile pachetului. eee 20 Baze de date. Limbajul PL/SQL 11.2. Tipuri de variabile Variabile PL/SQL = Scalare = Compozite + Referinti + LOB (Large Objects): NCLOB, CLOB, BLOB, BFILE + Obiect Variabile non-PL/SQL: variabile de mediu (BIND VARIABLES) 11.2.1 Variabile scalare Tipurile scalare contin valori simple, o variabila scalara poate confine la un moment dat 0 singura valoare si corespunde in principal tipurilor de date Oracle. Cele mai cunoscute si utilizate tipuri de date sunt prezentate in tabelul urmator: char (lung_max) - lungime fix de max 32.767 bytes = varchar? (lung_max) — lungime variabild de max 32.767 bytes = long [sir de caractere de lungime variabili 2GB] = number (precizie,scala) = boolean (true, false, null) = date = binary_integer si pls_integer (numere intregi intre - 2147483647 $i 2147483647) = binary_float si binary_double (pentru numere reale in varianta Oracle 10g) = timestamp (pentru fractiuni de secunda) Pentru alte tipuri de date puteti consulta capitolul 3 din [ORAPL]. Exemple: v_functie varchar2 (9); v_numar binary integer v_totalsal number (9,2) v_datainceput date:=sysdate+7; c_taxa constant number (3,2) :=8.25; v_valid boolean not null:=true; Variabile PL/SQL 21 Afisarea variabilelor PL/SQL se realizeaza prin intermediul functiei PUT_LINE din pachetului DBMS OUTPUT. Se poate utiliza operatorul de concatenare ( || ) pentru a afiga mai multe mesaje sau variabile pe aceeasi linie, de exemplu: DBMS_OUTPUT.PUT_LINE ('VALOAREA VARIABILEI ESTE: |\variabila); Popularea variabilelor cu valori din tabelele bazei de date Se utilizeazi comanda SELECT cu clauza INTO pentru popularea variabilelor PL/SQL cu valori ale atributelor din tabele, insd pentru aceasta cererile SELECT din cadrul blocurilor PL/SQL trebuie si furnizeze o singura linie rezultat, in caz contrar se va semnala o eroare. Pentru a putea accesa o anumit inregistrare sau valoare a unei coloane dintr-o tabeld este obligatoriu s& utilizim variabile PL/SQL, aga cum se observa si in exemplul urmator: Exemplu: Sd se afiseze numele angajatului cu codul 100: SET SERVEROUTPUT ON DECLARE --declaram variabila v_nume in care vom returna numele angajatului: v_nume VARCHAR2 (20) ; BEGIN -- utilizam instructiunea SELECT cu clauza INTO pentru a popula variabila: SELECT nume INTO v_nume FROM angajati WHERE id_angajat = 100; -- afisam valoarea varibilei: DBMS_OUTPUT. PUT_LINE('NUMELE ANGAJATULUI ESTE: ' || v_nume) ; END; / Rezultatele executiei blocului sunt prezentate in figura 2.1 _— 22 Baze de date. Limbajul PL/SQL Variabile PL/SQL 23 oe Ss Exemple: 2500 9¢ xan 0-0-5- eee ‘Sd se afiseze numele si prenumele angajatului cu codul 100: ae 1a. DECLARE Sree --declaram doua variabile pentru nume si 2G we come YOR): — i v_nume angajati.nume%TYPE; rae suai ir v_prenume angajati.prenume%TYPE; | aa [ BEGIN paar Figura 2.1 Executia blocului PL/SQL 1. Atributul %TYPE Pentru a declara o variabili PL/SQL care sa aiba acelasi tip de date cu o anumit& coloana dintr-o tabeli sau cu o alti variabilé declarati anterior putem: folosi atributul %TYPE. Declararea unei variabile cu % TYPE se face astfel: variabila sau variabilal tip_data; variabila2 _variabilal%TYPE; tabela.nume_coloani%TYPE; -- populam si afisam variabilele: SELECT nume, prenume INTO v_nume, v_prenume FROM angajati WHERE id_angajat = 100; DBMS_OUTPUT. PUT_LINE('NUMELE ANGAJATULUI ESTE:' || v_nume||' '| |v_prenume) ; END; Observatie: Restrictia NOT NULL a unei coloane nu se aplica si variabilei declarate prin folosirea atributului %TYPE. 2. Variabile de mediu sau variabile de legdtura ale aplicatiilor gazdi (BIND VARIABLES) Acestea sunt variabile de legaturi cu aplicatia in care ruleazi motorul PL/SQL si trebuie declarate in aplicatie (in mediul gazda), putand fi accesate i modificate in cadrul blocurilor PL/SQL. Dupa terminarea executiei blocului PL/SQL, variabila rimane in mediul gazdi cu valoarea primité in urma rul&rii blocului si poate fi pasati altui bloc, realizind astfel transmiterea de valori intre blocurile PL/SQL. Variabilele de mediu nu pot fi utilizate in cadrul procedurilor, functiilor sau pachetelor. Variabilele de mediu se declara in afara blocului PL/SQL cu ajutorul cuvantului cheie VARIABLE: VARIABLE g_numevariabili TIP Observagie: pentru declararea unei variabile de mediu de tip NUMBER nu se specifica precizia si scala; "4 Baze de date. Limbajul PL/SQL Variabilele de mediu se utilizeaza in cadrul unui bloc PL/SQL sau intr-o instructiune SQL din afara blocului prefixate cu (:) astfel: shost_variabila:=v_variabila; Variabilele de mediu se afigeazi fn afara blocului cu ajutorul comenzii PRINT (la afigare variabila nu se va prefixa cu “:”); PRINT g_numevariabili Exemple: 1. St se afigeze mesajul: Bloc PL/SQL cu ajutorul unei variabile de mediu: --declaram variabila de mediu: VARIABLE g _mesaj varchar2 (30) BEGIN -- atribuim mesajul variabilei "Bloc PL/SQL'; -- afisam valoarea variabilei in afara blocului: PRINT g_mesaj 2. Séi se afiseze numarul de comenzi a cdror modalitate de completare este online: SET SERVEROUTPUT ON -- declaram variabila de mediu: VARIABLE g_comenzi varchar2 (30) BEGIN -- utilizam o cerere SQL pentru a calcula si popula variabila cu numarul de comenzi: select count(*) into :g comenzi from comenzi where modalitate END; a -- afisam variabila: PRINT g_comenzi ‘online! ; Variabile PL/SQL 25 | Observatie: Se poate auto-afisa variabila prin setarea AUTOPRINT ON Exemplu: Sa se selecteze produsele si pretul acestora pentru acele produse care au prepul < preful mediu al produsului cu codul 3133 faré a utiliza 0 cerere imbricaté: SET SERVEROUTPUT ON SET AUTOPRINT ON VARIABLE g pret number BEGIN select avg(pret) into :g pret from rand_comenzi where id _produs = 3133; END; / --utilizam variabila de mediu intr-o interogare SQL: select * from rand_comenzi where pret< :g_pret; Figura 2.2 Executia blocului PL/SQL 26 Baze de date. Limbajul PL/SQL 3. Variabile de substitutie De regula, variabilele de substitutie sunt folosite pentru a transmite valori dinspre mediul SQL*Plus spre comenzile SQL sau blocurile PL/SQL, in timp ce variabilele de legatura (bind variables) sunt folosite pentru a transmite valori in sens invers sau pentru a transfera valori intre blocuri PL/SQL lansate succesiv (primul bloc seteaz variabila, urmatorul o consult). Prin variabilele de substitutie se pot transmite valori comenzilor SQL sau blocurilor PL/SQL lansate (folosind "&" sau "&&"). Se pot utiliza in comenzile SQL sau in blocurile PL/SQL prin "&nume_variabila" sau "&&nume_variabila". Variabilele de substitutie sunt locale sesiunii SQL in care au fost declarate. in mediul SQL variabilele de substitutie pot fi usor utilizate prin introducerea de valori de Ja tastatura utilizind ACCEPT, se pot defini cu DEFINE sau afisa pe ecran cu PROMPT; Exemplu: Sa se afigeze numarul de comenzi ale angajatului al cérui cod este introdus de la tastaturé de cdtre utilizator prin intermediul variabilei de substitutie &id_angajat: DECLARE v_nr_comenzi number (2) ; BEGIN --introducem id-ul angajatului cu ajutorul variabilei &id_angajat select count (nr_comanda) into v_nr_comenzi from comenzi where id_angajat=&id_angajat; dbms_output.put_line('Angajatul are: '| | v_nr_comenzi||' comenzi') ; END; / Variabile PL/SQL 27 (ea i f i 3 STR ml = Figura 2.3 Executia blocului PL/SQL fntr-un bloc PL/SQL se pot utiliza toate tipurile de variabile, respectind ins caracteristicile si regulile de utilizare ale acestora. in exemplul urmator se utilizeazi atat variabila de substitutie s_mume definita si initializata prin comanda DEFINE, cat si variabila de legatura g_salariul, dar si variabila local v_prenume de acelasi tip cu coloana nume din tabela Angajati. Variabila de substitutie definita cu DEFINE va fi implicit de tipul CHAR. Exemplu: Si se afiseze salariul si prenumele angajatului cu numele Abel: SET SERVEROUTPUT ON -- definim variabila de mediu VARIABLE g_salariul number -- definim variabila de substitutie DEFINE s_nume=Abel DECLARE --declaram variabila locala PL/SQL v_prenume angajati.nume%type; BEGIN select prenume,salariul into v_prenume, | salariul from angajati where nume='&s_nume'; 28 Baze de date. Limbajul PL/SQL Variabile PL/SQL 29 DBMS_OUTPUT.PUT_LINE ('Prenumele angajatului rE St ie = = a : este: '||v_prenume) ; foae 90 xe END; aio is EA ; aay Z | commas print g salariul 11.2.2 Tipuri de date compuse u radu eve Span di3138; 1. Tipul RECORD Reprezinti un grup de date logic corelate (de exemplu, datele despre un client: code, nume, adresa sunt diferite ca tip dar corelate logic). Atunci cand se declard un PL/SQL record pentru aceste cimpuri, ele pot fi manipulate ca o unitate, ficcare cémp (element al structurii) avand un nume si un tip de data, Atributele unui record sunt referite astfel: nume_record.nume_cémp. Declarea unui tip record se face astfel: | TYPE nume record IS RECORD (numecimp TIP_DATA [,nume_cimp TIP_DATA:=|DEFAULT valoare]...); Tar declararea unei variabile de acest tip: Variabili. NUME_RECORD; Figura 2.4 Executia blocului PL/SQL Exemplu: Utilizand un tip de data record definit de utilicator sd se afiseze ' Pretul minim al produsului cu codul 3133. Pentru a defini un record pe baza coloanelor unei tabele se foloseste : Yorowtype . In acest caz numele elementelor din record au acelagi nume ca si coloanele tabelei, acelasi tip de date si se gisesc in aceeasi ordine. NUME_RECORD tabelaY%SROWTYPE; DECLARE TYPE tip _produse IS RECORD (v_cod produse.id produsttype NOT NULL:=3000, v_den produse.denumire_produs%type, Exemplu: Sa se rescrie exemplul de mai sus utilizand atributul v_pret_min produse.pret_minttype) ; YROWTYPE:. vrec_prod tip _produse; a eS DECLARE dusetrowtype; SELECT id_produs, denumire produs, pret_min — prod produ; ‘YP! into vrec_prod from produse where id_produs=3133; dbms_output .put_line('Produsul: | II vrec_prod.v_den|| ' are pretul minim: "| |vrec_prod.v_pret_min) ; END; / SELECT * into vrec_prod from produse where id_produs=3133; dbms_output .put_line('Produsul: '| | vrec_prod.denumire produs|| ' are pretul minim: "| |vrec_prod.pret_min) ; END; / 30 Baze de date. Limbajul PL/SQL Variabile PL/SQL at 2. Specificati ce se va afiga la rularea urmatorului bloc PL/SQL (care contine blocuri imbricate, ilustrand domeniul de vizibilitate al unor variabile care au acelasi nume): DECLARE EXERCITI PROPUSE var NUMBER; BEGIN var 1; . DBM: , 1. Specificati ce se va afisa la rularea urmiitorului bloc PL/SQL: S_OUTPUT. PUT_LINE (var) ; ‘bli DECLARE see a v_varl NUMBER :=100; nae v_var2 NUMBER; | NUMBER ; 7 BEGIN v_var3 NUMBER := v_var2; | 3 7 : : var :=2; v_var4 VARCHAR (20) : 'variabila PL/SQL'; a our v_var5 NUMBER NOT NULL := v_varl; | _ OUTPUT. PUT_LINE (var) ; Ee END bloc1; c_const1 CONSTANT DATE TO_DATE ('12/02/2007', 'dd/mm/yyyy') + | DBMS_OUT: A c¢_const2 CONSTANT NUMBER NOT NULL := 2; }_OUTPUY. PUT_LINE (var) ; c_const3 CONSTANT NUMBER := NULL; | v_var6é NUMBER DEFAULT NULL; } ee - | DECLARE var NUMBER; BEGIN a2 ER; DBMS_OUTPUT. PUT_LINE('variabila 1 = '||v_varl); a DBMS_OUTPUT. PUT_LINE('variabila 2 "| |v_var2) ; oe ae DEMS_OUTPUT. PUT_LINE('variabila 3 = '||v_var3); s_OUTPUT. PUT_LINE (var) ; DBMS_OUTPUT.PUT_LINE('variabila 4 = ' | |v_var4); I DBMS OUTPUT. PUT LINE('variabila 5 = '||v_var5); <> 7 7 DECLARE DBMS_OUTPUT. PUT_LINE('constanta 1 = | |e_const1) ; var NUMBER; 7 BEGIN DBMS_OUTPUT. PUT_LINE('constanta 2 = var :=4; "| |c_const2) ; i DBMS_OUTPUT.PUT_LINE('constanta 3 = DBMS_OUTPUT. PUT_LINE (var) ; ‘| |e_const3) ; DBMS_OUTPUT. PUT_LINE (bloc2.var) ; DBMS_OUTPUT.PUT_LINE('variabila 6 = '||v_var6); END b1OSeiToe STU ., END; DBMS_ouUTPYfePUT_LINE (var) ; a DEPARTAMENTU BIBLIOTECA = atl Te Baze de date. Limbajul PL/SQL 32 DBMS_OUTPUT . PUT_LINE (var) ; END; / 3. Specificati ce se va afiga la rularea urmitorului bloc PL/SQL: DECLARE stoc NUMBER (3) :=600; mesaj VARCHAR2 (50) :='Produsul 101'; BEGIN DECLARE stoc NUMBER (3) :=10; mesaj VARCHAR2 (50) :='Produsul 102'; um VARCHAR2(10):= ' bucati '; BEGIN stoc:= stoc+l; mesaj:='Stocul pentru ' | |mesaj||' este de: '||stoc| |um; DBMS_OUTPUT. PUT_LINE (mesaj) ; END; stoc:= stoc+100; mesaj:='Stocul pentru '| |mesaj||' este de: '||stoc| |um; DBMS_OUTPUT. PUT_LINE (mesaj) 7 END; i 4, Sa se calculeze suma a doua numere, iar rezultatul si se divid’ cu 3. ‘Numerele se vor introduce de la tastatura: 5, S& se afigeze salariul marit cu un procent. Salariul si procentul se introduc de la tastatura. INTERACTIUNEA CU SERVERUL ORACLE PRIN COMENZI SQL Interactiunea se realizeazi prin intermediul comenzilor de definire a datelor - DDL (Data Definition Language), limbajul de gestiune a utilizatorilor - DCL (Data Control Language), limbajul de manipulare a datelor - DML (Data Manipulation Language), limbajul de control al tranzactiilor - TPL (Transaction Processing Language) astfel: ° PL/SQL suport toate comenzile din limbajul de manipulare a datelor (DML) si din cel de control al tranzactiilor (TPL). Un bloc PL/SQL nu e o tranzactie, comenzile Commit/ Rollback/ Savepoint sunt independente de bloc dar pot sa apara in interiorul sau. Comenzi DMI/TPL Execufie SELECT, INSERT, UPDATE, Se execut normal in cadrul bloculul DELETE, MERGE COMMIT, ROLLBACK, Pot aparea in bloc dar au efect asupra SAVEPOINT tuturor —tranzacfiilor din _interiorul si din afara acestuia. * PL/SQL nu suporti comenzi de definire a datelor sau de gestiune a utilizatorilor (DDL sau DCL) in cadrul unui bloc. Pentru executarea acestor comenzi se utilizeaz’ comanda EXECUTE IMMEDIATE ‘comanda DDL’: Comenzi DDL/DCL Execujie CREATE, ALTER, DROP EXECUTE IMMEDIATE ' CREATE GRANT, REVOKE TABLE.... ' Exemple: 1. Sa se creeze tabela PROD in cadrul unui bloc PL/SQL: SET SERVEROUTPUT ON BEGIN EXECUTE IMMEDIATE 'CREATE table prod AS SELECT * FROM produse where 1=2'; END; / 34 Baze de date. Limbajul PL/SQL i " 1 a) uegepaBy p

You might also like