Ugrás a fő tartalomhoz

PL/SQL függvények, eljárások, blokkok

A PL/SQL alprogramok lehetővé teszik, hogy logikai egységeket külön függvényekbe és eljárásokba szervezzünk.
Ezáltal az ismétlődő kód újrahasznosítható és átláthatóbb lesz.

Alprogram típusai

TípusLeírásVisszatérési érték
Eljárás (PROCEDURE)Utasításokat hajt végre, lehetnek paramétereiNincs
Függvény (FUNCTION)Értéket ad vissza, akár lekérdezésekben is használhatóVan

Lokális (névtelen) blokkok

A legegyszerűbb PL/SQL egység egy névtelen blokk, ami nem mentődik el az adatbázisban.

DECLARE
v_name VARCHAR2(30) := 'Mark';
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || v_name);
END;

Eljárások (PROCEDURE)

Az eljárás nem ad vissza értéket, de végezhet műveleteket (pl. beszúrás, frissítés, kiírás).

Példa – eljárás létrehozása és hívása

CREATE OR REPLACE PROCEDURE increase_salary (
p_percent IN NUMBER
) AS
BEGIN
UPDATE employees
SET salary = salary + salary * (p_percent / 100);

DBMS_OUTPUT.PUT_LINE('Fizetések ' || p_percent || '%-kal növelve.');
END;

-- Meghívás
BEGIN
increase_salary(10);
END;

Paraméterek

IrányJelentés
INbemenő paraméter (értéket adunk át)
OUTkimenő paraméter (értéket ad vissza)
IN OUTmindkét irányban használható

Függvények (FUNCTION)

A függvény értéket ad vissza, amit akár SELECT utasításban is használhatunk.

Példa – függvény, amely éves fizetést számol

CREATE OR REPLACE FUNCTION get_annual_salary (
p_salary IN NUMBER
) RETURN NUMBER AS
BEGIN
RETURN p_salary * 12;
END;

-- meghívás
DECLARE
v_annual NUMBER;
BEGIN
v_annual := get_annual_salary(450000);
DBMS_OUTPUT.PUT_LINE('Éves fizetés: ' || v_annual);
END;

Tárolt alprogramok

A tárolt alprogramokat az adatbázisban mentjük el (CREATE OR REPLACE kulcsszóval).
Így újra felhasználhatók, más felhasználók vagy alkalmazások is meghívhatják őket.

TípusTárolt?Hol él?Hívható másik programból?
Névtelen blokkNemCsak a futtatás idejéreNem
Eljárás (PROCEDURE)IgenAdatbázisbanIgen
Függvény (FUNCTION)IgenAdatbázisbanIgen

Feladatok

1. Feladat

Készíts egy eljárást, amely:

  • Bemenetként kap egy dolgozó ID-t,
  • Kiírja a dolgozó nevét és fizetését (DBMS_OUTPUT-tal).

2. Feladat

Készíts egy függvényt, amely:

  • Paraméterként megkapja a dolgozó havi fizetését,
  • Kiszámítja a 13. havi bónusszal növelt éves fizetést,
  • Visszaadja az eredményt.

3. Feladat

Készíts egy tárolt eljárást, amely:

  • Új dolgozót szúr be az employees táblába,
  • Ha a fizetés kisebb, mint 400000, automatikusan 10%-ot emel rajta,
  • A művelet végén COMMIT-et hajt végre.