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ípus | Leírás | Visszaté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ány | Jelentés |
|---|---|
IN | bemenő paraméter (értéket adunk át) |
OUT | kimenő paraméter (értéket ad vissza) |
IN OUT | mindké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ípus | Tárolt? | Hol él? | Hívható másik programból? |
|---|---|---|---|
| Névtelen blokk | Nem | Csak a futtatás idejére | Nem |
Eljárás (PROCEDURE) | Igen | Adatbázisban | Igen |
Függvény (FUNCTION) | Igen | Adatbázisban | Igen |
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
employeestá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.