Kihagyás

9. gyakorlat

Prodecúra definiálása

CREATE OR REPLACE PROCEDURE osszeadas (a IN INTEGER, b IN INTEGER, c OUT INTEGER) AS
BEGIN
    c := a + b;
END;
/

DECLARE
    eredmeny INTEGER;
BEGIN
    osszeadas(1, 2, eredmeny);
    dbms_output.put_line('Eredmeny: ' || eredmeny);
END;
/

Prodecúra ki-be változóval

CREATE OR REPLACE PROCEDURE negyzet (x IN OUT INTEGER) AS
BEGIN
    x := x * x;
END;
/

DECLARE
    szam INTEGER;
BEGIN
    szam := 5;
    negyzet(szam);
    dbms_output.put_line('Eredmeny: ' || szam);
END;
/

Függvény

CREATE OR REPLACE FUNCTION osszeadas_fn (A IN INTEGER, b IN INTEGER)
    RETURN INTEGER AS
    osszeg INTEGER;
BEGIN
    osszeg := a + b;
    RETURN osszeg;
END;
/

Függvény hívásában segít a dual beépített tábla:

SELECT osszeadas_fn(1, 2) FROM dual;

Prodecúrában lehet használni "simán"

DECLARE
    szam INTEGER;
BEGIN
    szam := osszeadas_fn(1, 2);
    dbms_output.put_line('Osszeg:' || szam);
END;
/

Kurzorok

Fontos parancsok:

  • CURSOR <kurzor neve> IS SELECT ...;
  • OPEN <kurzor neve>;
  • FETCH <kurzor neve> INTO <változó neve>;
  • CLOSE <kurzor neve>;
  • EXIT WHEN <kurzor neve%notfound> LOOP;

Kurzor példa 1

CREATE OR REPLACE PROCEDURE kurzorteszt1 AS
    CURSOR k IS SELECT * FROM dolgozo;
    sor dolgozo%rowtype;
BEGIN
    OPEN k;
    LOOP
        FETCH k INTO sor;
        EXIT WHEN k%notfound;
        dbms_output.put_line(sor.dnev);
    END LOOP;
    CLOSE k;
END;
/

CALL kurzorteszt1();

Kurzor példa 2

CREATE OR REPLACE PROCEDURE kurzorteszt2 AS
    CURSOR k IS SELECT * FROM dolgozo;
    sor dolgozo%rowtype;
BEGIN
    FOR sor IN k LOOP
        dbms_output.put_line(sor.dnev);
    END LOOP;
END;
/

CALL kurzorteszt2();

1. feladat

Írj egy prím(n INTEGER) függvényt, ami eldönti egy adott számról, hogy prím-e.

CREATE OR REPLACE FUNCTION prim (n IN INTEGER)
    RETURN BOOLEAN AS
    c INTEGER;
BEGIN
    c := 0;
    FOR i in 1..n LOOP
        IF MOD(n, i) = 0 THEN
           c := c+1; 
        END IF;
    END LOOP;
    RETURN c = 2;
END;
/

DECLARE
BEGIN
    IF prim(10) THEN
        dbms_output.put_line('Prim');
    ELSE
        dbms_output.put_line('Nem Prim');
    END IF;
END;
/

2. feladat

Számoljuk ki az n. fibonacci számot

CREATE OR REPLACE FUNCTION fib (n IN INTEGER) RETURN INTEGER AS
BEGIN
    IF n = 0 THEN
        RETURN 0;
    END IF;
    IF n = 1 THEN
        RETURN 1;
    END IF;
    RETURN fib(n-1)+fib(n-2);
END;
/

3. feladat

Írj egy PLSQL függvényt, amely egy számot kap paraméterül, és visszaadja az [1, N] intervallumba eső páros számok összegét

CREATE OR REPLACE FUNCTION evensum(n IN INTEGER) RETURN INTEGER AS
    c INTEGER;
BEGIN
    c := 0;
    FOR i IN 1..n LOOP
        IF i MOD 2 = 0 THEN
            c := c + 1;
        END IF;
    END LOOP;
    RETURN c;
END;
/