10
Facultatea de Cibernetică, Statistică şi Informatică Economică SGBD Oracle – seminarul 1 Introducere în PL/SQL – Procedural Language extension to SQL 1. Caracteristici generale: Construcţiile PL/SQL conţin structuri de control procedurale şi comenzi descriptive SQL; PL/SQL este un limbaj procedural structurat pe bloc, programele putând fi împărţite î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ă instrucţiunile. 2. Blocuri PL/SQL: Orice unitate PL/SQL conţine unul sau mai multe blocuri, complet separate sau imbricate. Componentele unui bloc PL/SQL: Un bloc PL/SQL este compus din până la 3 secţiuni: declarativă (opţională), executabilă (obligatorie) şi de tratare a excepţiilor (opţională). DECLARE (Opţional) variabile, cursori, excepţii BEGIN (Obligatoriu) comenzi SQL (asigură accesul la baza de date) structuri de programare procedurală PL/SQL EXCEPTION (Opţional) acţiuni ce se execută când apare o eroare END; (Obligatoriu) 1

Seminar 1 SGBD

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

, =, >=,