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.