Professional Documents
Culture Documents
Curs 13
Curs 13
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