Download as ppt, pdf, or txt
Download as ppt, pdf, or txt
You are on page 1of 17

PL/SQL

Curs

1
Structuri repetitive
DECLARE
x number := 20;
BEGIN
LOOP
dbms_output.put_line(x);
x := x + 10;
IF x > 50 THEN
exit;
END IF;
END LOOP;
-- dupa exit, se executa aceste instructiuni
dbms_output.put_line(‘Dupa Exit x este: ' || x);
END;
/

2
WHILE si FOR
DECLARE
a number(2) := 10;
BEGIN
WHILE a < 21 LOOP
dbms_output.put_line(' a: ' || a);
a := a + 1;
END LOOP;
END;
/

DECLARE
a number(2);
BEGIN
FOR a in 10 .. 20 LOOP
dbms_output.put_line(' a: ' || a);
END LOOP;
END;
/

3
Controlul structurilor repetitive
 EXIT, CONTINUE şi GOTO
DECLARE
a number(2) := 10;
BEGIN
<<loopstart>>
-- while loop
WHILE a < 20 LOOP
dbms_output.put_line ('a: ' || a);
a := a + 1;
IF a = 15 THEN
a := a + 1;
GOTO loopstart;
END IF;
END LOOP;
END;
/

4
Stringuri
DECLARE
nume varchar2(20);
companie varchar2(30);
introducere clob;
alege char(1);
BEGIN
nume := ‘Ion Popescu';
companie := 'ITech';
introducere := ' Salut! Sunt Ion Popescu de la ITech.';
alege := 'y';
IF alege = 'y' THEN
dbms_output.put_line(nume);
dbms_output.put_line(companie);
dbms_output.put_line(introducere);
END IF;
END;
/

5
Stringuri- funcţii şi operatori
 operatori: ||
 funcţii:
 ASCII(x);
 CHR(x); CONCAT(x, y);
 INITCAP(x); INSTR(x, find_string [, start] [, occurrence]);
INSTRB(x);
 LENGTH(x); LENGTHB(x); LOWER(x); LPAD(x, width [,
pad_string]) ; LTRIM(x [, trim_string]);
 NANVL(x, value); NLS_INITCAP(x); NLS_LOWER(x) ;
NLS_UPPER(x); NLSSORT(x); NVL(x, value); NVL2(x,
value1, value2);
 REPLACE(x, search_string, replace_string); RPAD(x, width
[, pad_string]); RTRIM(x [, trim_string]);
 SOUNDEX(x) ; SUBSTR(x, start [, length]); SUBSTRB(x);
 TRIM([trim_char FROM) x);
 UPPER(x);

6
Tablouri
DECLARE
type tabloudenume IS VARRAY(5) OF VARCHAR2(10);
type tablouevaluari IS VARRAY(5) OF INTEGER;
nume tabloudenume;
evaluari tablouevaluari;
numar integer;
BEGIN
nume := tabloudenume(‘Corina', 'Pavel', 'Andrei', 'Raluca', 'Alin');
evaluari:= tablouevaluari(23, 17, 18, 17, 22);
numar:= nume.count;
dbms_output.put_line('Total '|| numar || ' persoane');
FOR i in 1 .. total LOOP
dbms_output.put_line(‘Persoana: ' || nume(i) || ' Punctaj: ' ||
evaluari(i));
END LOOP;
END;
/

7
Proceduri
 Pot fi create:
 la nivel de schema-program standalone
 într-un pachet
 într-un bloc PL/SQL
 Componentele unui subprogram:
 partea declarativă;
 partea executabilă;
 tratarea excepţiilor

8
Creare proceduri
CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_name [IN | OUT |
IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
unde:
 procedure_name – numele procedurii
 [OR REPLACE]-permite modificarea unei proceduri existente
 parameter_name-numele parametrilor opţionali, IN | OUT | IN OUT reprezentând valorile
ce vor fi transferate dinspre/înspre exterior
 procedure_body-partea executabilă
 IS | AS- folosit pentru creare proceduri standalone (AS) sau nu (IS)
CREATE OR REPLACE PROCEDURE test
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/

9
Proceduri – execuţie şi ştergere
 Execuţie:
EXECUTE test;
 sau
BEGIN
test;
END;
/
 Ştergere:
DROP PROCEDURE test;
10
Parametrii în subprograme
 IN
 permite transmiterea unui parametru către
subprogram. Parametru transmis se comportă ca
o constantă
 OUT
 un astfel de parametru returnează o valoare
programului apelant. Valoarea poate fi
schimbată
 IN OUT
 un parametru ce transmite o valoare iniţială
către subprogram şi returnează o valoare
modificată către apelant. Parametrul este o
variabilă, nu o constantă sau o expresie

11
Parametrii în subprograme-
exemple(1)
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum dintre(23, 45) : ' || c);
END;
/

12
Parametrii în subprograme-
exemple(2)
DECLARE
a number;
PROCEDURE patrat(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
patrat(a);
dbms_output.put_line(' Patratul lui (23): ' || a);
END;
/

13
Funcţii-creare
CREATE [OR REPLACE] FUNCTION
function_name [(parameter_name [IN | OUT |
IN OUT] type [, ...])]
RETURN return_datatype
{IS | AS}
BEGIN
< function_body >
END [function_name];
unde:
 RETURN – specifică tipul de dată returnat de
către funcţie

14
Funcţii-exemple(1)
CREATE OR REPLACE FUNCTION totalEmployees
RETURN number IS
total number(2) := 0;
BEGIN
SELECT count(*) into total
FROM Employees;

RETURN total;
END;
/
--
DECLARE
c number(2);
BEGIN
c := totalCustomers();
dbms_output.put_line(‘Numarul total de angajati: ' || c);
END;
/

15
Funcţii-exemple(2)
DECLARE
a number;
b number;
c number;
FUNCTION findMax(x IN number, y IN number)
RETURN number IS
z number;
BEGIN
IF x > y THEN
z:= x;
ELSE
z:= y;
END IF;
RETURN z;
END;
BEGIN
a:= 23;
b:= 45;
c := findMax(a, b);
dbms_output.put_line(' Maximul dintre (23,45): ' || c);
END;
/

16
Funcţii-exemple(3)
DECLARE
num number;
numfin number;
FUNCTION funct(x number)
RETURN number
IS
f number;
BEGIN
IF x=0 THEN
f := 1;
ELSE
f := x * funct(x-1);
END IF;
RETURN f;
END;
BEGIN
num:= 6;
numfin:= funct(num);
dbms_output.put_line(' Rezultatul pentru '|| num || ' este ' || numfin);
END;
/

17

You might also like