SET SERVEROUTPUT ON

/* Értékadás CASE feltétellel. */

DECLARE
        datum  DATE := DATE '1983-05-29';
        evszak VARCHAR2(6);

BEGIN
        evszak :=
        CASE
                WHEN TO_CHAR(datum, 'MM') IN ('01''02''12') THEN 'tel'
                WHEN TO_CHAR(datum, 'MM') IN ('03''04''05') THEN 'tavasz'
                WHEN TO_CHAR(datum, 'MM') IN ('06''07''08') THEN 'nyar'
                WHEN TO_CHAR(datum, 'MM') IN ('09''10''11') THEN 'osz'
                ELSE 'Hiba'
        END;
        DBMS_OUTPUT.PUT_LINE (evszak);
END;

/* Példa az IF-THEN-ELSE feltétel használatára. */

DECLARE
                szam NUMBER := -5;
                absz NUMBER;

        BEGIN
                IF szam >= 0 THEN absz := szam;
                ELSE absz:= -1 * szam;
                DBMS_OUTPUT.PUT_LINE (szam || ' abszolút értéke: '|| absz);
                END IF;
        END;

/* Példa a CASE feltétel használatára. */

DECLARE
        osztalyzat NUMBER(1) := 4;

BEGIN
        CASE osztalyzat
                WHEN 1 THEN DBMS_OUTPUT.PUT_LINE('elégtelen');
                WHEN 2 THEN DBMS_OUTPUT.PUT_LINE('elégséges');
                WHEN 3 THEN DBMS_OUTPUT.PUT_LINE('közepes');
                WHEN 4 THEN DBMS_OUTPUT.PUT_LINE('jó');
                WHEN 5 THEN DBMS_OUTPUT.PUT_LINE('jeles');
                ELSE DBMS_OUTPUT.PUT_LINE('Nincs ilyen jegy.');
        END CASE;
END;

/* Példa egyszerű LOOP szerkezetre. */

DECLARE
                fakt  NUMBER:=1
                i     PLS_INTEGER:=2;
BEGIN
                LOOP
                        fakt:=fakt*i;
                        EXIT WHEN fakt > 1000;
                        i:=i+1;
                END LOOP;
                DBMS_OUTPUT.PUT_LINE('A faktorialis: ' || fakt);
END;

/* Példa WHILE ciklusra. */

DECLARE
                ossz  NUMBER :=1
        BEGIN
                WHILE ossz < 10000 LOOP
                        ossz := 2*ossz;
                END LOOP;
                DBMS_OUTPUT.PUT_LINE (ossz);
        END;

/* Példa FOR ciklusra. */

DECLARE
        ossz NUMBER := 0;

BEGIN
        FOR i in 1..100 LOOP
                ossz := ossz + i;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('Az első száz szám összege: ' || ossz);
END;

/* SELECT INTO utasítás I. */

DECLARE
                reszl_varos           reszleg.varos%TYPE;
        
BEGIN          
                SELECT varos
                INTO reszl_varos
                FROM reszleg
                WHERE azon = 'B01';
                DBMS_OUTPUT.PUT_LINE('A varos: ' || reszl_varos);
END;

/* SELECT INTO utasítás II. */

DECLARE
                sor           reszleg%ROWTYPE;
BEGIN          
                SELECT *
                INTO sor
                FROM reszleg
                WHERE azon = 'B01';
END;