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:
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