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éterei❌ Nincs
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 blokk❌ NemCsak 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.