Function Procedure Packages Oracle PLSQL Tutorial

SQL>
SQL> CREATE OR REPLACE FUNCTION expiration_date (
  2      good_for_period_in IN INTERVAL YEAR TO MONTH
  3  )
  4      RETURN TIMESTAMP
  5  IS
  6     bad_month EXCEPTION;
  7     PRAGMA EXCEPTION_INIT (bad_month, -1839);
  8
  9     todays_date TIMESTAMP;
 10     result_date TIMESTAMP;
 11  BEGIN
 12     todays_date := TRUNC(SYSTIMESTAMP);
 13     LOOP
 14        BEGIN
 15           result_date := todays_date + good_for_period_in;
 16        EXCEPTION
 17           WHEN bad_month THEN
 18              todays_date := todays_date - INTERVAL '1' DAY;
 19           WHEN OTHERS THEN
 20              RAISE;
 21        END;
 22
 23        EXIT WHEN result_date IS NOT NULL;
 24     END LOOP;
 25     RETURN result_date;
 26  END;
 27  /
Function created.