/*
  Adott két séma:
  SOFOR( rendszam VARCHAR2(8), nev VARCHAR2(20), szuldatum DATE )
  FUVAR( rendszam VARCHAR2(8), t_indul TIMESTAMP, t_erkezik TIMESTAMP, szuldatum DATE);
  
  A program kilistázza, hogy hány százalék prémium jár a sofőröknek. Életkor
  függvényében 40 év felett 10 évenként 5% prémium jár. A megoldáshoz egy függvényt
  használunk, amely paraméterül kapja a soför rendszámát és visszatér a prémium értékével.

*/
SET SERVEROUTPUT ON
DECLARE 
  v_rendszam SOFOR.rendszam%TYPE;
  v_nev SOFOR.nev%TYPE;
  v_premium NUMBER;

  CURSOR soforLista IS
      SELECT rendszam, nev FROM sofor;

  FUNCTION premium( rsz IN VARCHAR2 ) RETURN NUMBER
  IS 
    v_eletkor NUMBER;
    v_szuldatum SOFOR.szuldatum%TYPE;
    v_szazalek NUMBER;
    v_szorzo NUMBER;
    v_diff_date DATE;
  BEGIN
    SELECT szuldatum INTO v_szuldatum
    FROM sofor
    WHERE rendszam = rsz;
    
    v_eletkor := EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM v_szuldatum);
    
    DBMS_OUTPUT.PUT_LINE(v_eletkor);
    
    IF v_eletkor >= 40 THEN 
      v_szorzo := CEIL((v_eletkor - 40) / 10);
      v_szazalek := v_szorzo * 5;
    END IF;
    RETURN v_szazalek;
  END premium;

BEGIN
  OPEN soforLista;
  LOOP 
    DBMS_OUTPUT.PUT_LINE('----------------------------------------');
    FETCH soforLista INTO v_rendszam, v_nev;
    EXIT WHEN soforLista%NOTFOUND;
    v_premium := premium(v_rendszam);
    DBMS_OUTPUT.PUT_LINE( v_nev || '    ' || v_premium );
  END LOOP;
  CLOSE soforLista;
END;