Upload
simi-sim
View
1
Download
0
Embed Size (px)
DESCRIPTION
Seminar 1 SGBD (cu explicatii)
Citation preview
Seminar 1
Facultatea de Cibernetic, Statistic i Informatic Economic
SGBD Oracle seminarul 1
Introducere n PL/SQL Procedural Language extension to SQL
1. Caracteristici generale:
Construciile PL/SQL conin structuri de control procedurale i comenzi descriptive SQL;
PL/SQL este un limbaj procedural structurat pe bloc, programele putnd fi mprite n blocuri logice;
Blocurile PL/SQL sunt procesate de motorul PL/SQL care poate fi rezident pe ORACLE SERVER sau pe un instrument de dezvoltare (ex.: Oracle Forms, Reports, JDeveloper etc.);
Multe instrumente ORACLE au propriul motor PL/SQL (ex.: Oracle Forms, Reports, JDeveloper etc.);
Tipurile de date din SQL pot fi folosite n PL/SQL;
Programarea n PL/SQL este modularizat se utilizeaz blocurile care grupeaz instruciunile.
2. Blocuri PL/SQL:
Orice unitate PL/SQL conine unul sau mai multe blocuri, complet separate sau imbricate.
Componentele unui bloc PL/SQL:
Un bloc PL/SQL este compus din pn la 3 seciuni: declarativ (opional), executabil (obligatorie) i de tratare a excepiilor (opional).
DECLARE (Opional)
variabile, cursori, excepii
BEGIN (Obligatoriu)
comenzi SQL (asigur accesul la baza de date)
structuri de programare procedural PL/SQL
EXCEPTION (Opional)
aciuni ce se execut cnd apare o eroare
END; (Obligatoriu)
Observaii:
comenzile SQL asigur accesul la baza de date;
operaiile efectuate cu variabilele PL/SQL n cadrul instruciunilor procedurale nu presupun accesarea bazei de date;
se folosete (;) dup fiecare instruciune SQL sau instruciune de control PL/SQL;
blocul PL/SQL se termin cu (;);
se folosete (/) pentru a lansa un bloc anonim n bufferul SQL;
o eroare n PL/SQL este tratat ca o excepie;
Tipuri de blocuri PL/SQL:
Blocuri anonime;
Funcii stocate i funcii de aplicaii;
Proceduri stocate i proceduri de aplicaii;
Pachete;
Declanatoare (triggeri) pe baza de date / de aplicaii.
Blocurile anonime:
sunt nedenumite;
nu sunt stocate n baza de date;
se declar inline, n locul n care se dorete execuia lor;
se execut n momentul rulrii.
Exemplu:
DECLARE
v_variabila varchar2(5);
BEGIN
SELECT coloana INTO v_variabila FROM tabela;
EXCEPTION
WHEN excepie THEN aciune
END;
/
Sa se afiseze numele angajatului cu id-ul 100 (id_angajat).(este un bloc anonim, nu va fi stocat in baza de date).
--se pune inainte de fiecare bloc SET SERVEROUTOUT ON, ca sa-ti afiseze dupa rularea blocului ce face acel bloc, in cazul nostru, daca nu punem acest 'serveroutput on', dupa ce vom rula blocul, ne va afisa in partea de jos doar 'annonymus block completed', adica iti va spune ca nu ai erori, dar nu-ti va afisa nimic
set serveroutput on
--avem nevoie de o variabila in care sa memoram numele angajatului ( cum foloseam in C un aux, un fel de variabila ajutatoare)
DECLARE
--declaram o variabila in care sa fie memorat numele angajatului, varchar2(25) este tipul variabilei, este un sir de caractere.
v_nume varchar2(25);
BEGIN
--stocam (SELECT) ce avem nevoie (nume) in (INTO) variabila declarata (v_nume) , iar acest nume se afla in tabela angajati(=>FROM angajati), angajatul cu id-ul 100(=>avem o conditie care trebuie indeplinita)
SELECT nume INTO v_nume FROM angajati WHERE id_angajat=100;
--afisam numele angajatului stocat in variabila declarata
DBMS_OUTPUT.PUT_LINE('Numele angajatului cu id-ul 100 este: '||v_nume);
END;
/
Sa se afiseze prenumele angajatului cu id-ul (id_angajat) 50, iar daca nu exista id-ul sa se afiseze un mesaj corespunzator.(Este un bloc
anonim, nu va fi stocat in baza de date, daca nu exista id-ul 50, vom trata o exceptie)
set serveroutput on
DECLARE
--trebuie sa declaram o variabila in care sa memoram prenumele angajatului
v_prenume varchar2(25);
BEGIN
--stocam (SELECT) numele in(INTO) variabila declarata(v_prenume),prenume care se afla in tabela angajati, al angajatului cu id-ul 50 (deci trebuie sa indeplineasca o conditie)
SELECT prenume INTO v_prenume FROM angajati where id_angajat=50;
--afisam prenumele angajatului stocat in variabila declarata
DBMS_OUTPUT.PUT_LINE('Prenumele angajatului este: '||v_prenume);
--in cazul in care nu exista un angajat cu id-ul 50, ca sa nu ne dea eroare, o tratam ca o exceptie, iar in acest caz putem cere programului sa ne afiseze un mesaj, ca sa ne dam seama de ce nu a afisat nimic
EXCEPTION WHEN
NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Nu exista nici un angajat cu id-ul 50');
END;
/
Blocuri anonime imbricate
se pot imbrica mai multe blocuri;
acestea se pot eticheta cu , iar variabilele din cadrul blocurilor se pot utiliza astfel: eticheta_bloc.variabila.
BEGIN
.
>
DECLARE
..
BEGIN
..
END eticheta_bloc;
END;
/
Sa se afiseze numele, prenumele si email-ul angajatului cu id-ul 101 in blocuri anonime imbricate.
set serveroutput on
BEGIN
--folosim mai multe blocuri, iar acestea vor afisa pe rand
--blocul in care stocam numele angajatului
DECLARE
--declaram o variabila in care vom stoca numele
b_nume varchar2(25);
BEGIN
SELECT nume INTO b_nume FROM angajati WHERE id_angajat=101;
DBMS_OUTPUT.PUT_LINE('Numele angajatului este: '||bloc_nume.b_nume);
--trebuie sa specificam blocul in care se afla variabila pe care vrem sa o afisam, nume_bloc.variabila
--am terminat cu acest bloc, deci putem sa-l inchidem
END bloc_nume;
--blocul in care stocam prenumele angajatului
DECLARE
b_prenume varchar2(25);
BEGIN
SELECT prenume INTO b_prenume FROM angajati WHERE id_angajat=101;
DBMS_OUTPUT.PUT_LINE('Prenumele angajatului este: '||bloc_prenume.b_prenume);
END bloc_prenume;
--blocul in care stocam email-ul angajatului
DECLARE
b_email varchar2(25);
BEGIN
SELECT email INTO b_email FROM angajati WHERE id_angajat=101;
DBMS_OUTPUT.PUT_line('Email-ul angajatului este: '||bloc_email.b_email);
END bloc_email;
END;
/
Proceduri, funcii: (sunt detaliate in alt seminar)
blocuri PL/SQL cu un nume;
se pot stoca la nivel de ORACLE SERVER(proceduri/funcii stocate) sau la nivel de aplicaie (DEVELOPER Forms si Reports).
Exemple:
CREATE [OR REPLACE] PROCEDURE nume_procedura
IS
.
BEGIN
.
[EXCEPTION]
.
END;
/
CREATE [OR REPLACE] FUNCTION nume_functie
RETURN tip_data
IS
BEGIN
RETURN valoare
[EXCEPTION]
END;
/
Pachete de programe - grupeaz proceduri, funcii.
Declanatori pe baza de date - blocuri PL/SQL asociate tabelelor (de baz sau virtuale) i lansate automat n execuie cnd are loc o comanda de manipulare.
Declanatori de aplicaie - blocuri PL/SQL asociate unor evenimente din cadrul aplicaiei (de exemplu: deplasarea mouse-ului, apsarea unui buton) i lansate n execuie automat.
3. Operatori n PL/SQL
Operator
Caracteristici
+, -, *, /, ** (op. exponenial)
Operatori aritmetici
AND, OR, NOT
Operatori logici
, =, >=,