PL SQL Oracle PLSQL

SQL>
SQL> SET ECHO ON
SQL> SET SERVEROUTPUT ON SIZE 1000000
SQL>
SQL> DECLARE
  2
  3    current VARCHAR2(9 CHAR);
  4    element INTEGER;
  5
  6    TYPE months_varray IS VARRAY(12) OF STRING(9 CHAR);
  7
  8    TYPE calendar_table IS TABLE OF VARCHAR2(9 CHAR)INDEX BY VARCHAR2(9 CHAR);
  9
 10    month MONTHS_VARRAY := months_varray('January','February','March','April','May','June','July','August');
 11
 12    calendar CALENDAR_TABLE;
 13
 14  BEGIN
 15
 16    IF calendar.COUNT = 0 THEN
 17
 18      FOR i IN month.FIRST..month.LAST LOOP
 19
 20        calendar(month(i)) := TO_CHAR(i);
 21
 22        DBMS_OUTPUT.PUT_LINE('Index :'||month(i)||' is '||i);
 23
 24      END LOOP;
 25      FOR i IN 1..calendar.COUNT LOOP
 26
 27        IF i = 1 THEN
 28
 29          current := calendar.FIRST;
 30
 31          element := calendar(current);
 32
 33        ELSE
 34
 35          IF calendar.NEXT(current) IS NOT NULL THEN
 36
 37            current := calendar.NEXT(current);
 38
 39            element := calendar(current);
 40
 41          ELSE
 42
 43            EXIT;
 44
 45          END IF;
 46
 47        END IF;
 48
 49        DBMS_OUTPUT.PUT_LINE('Index :'||current||' is '||element);
 50
 51      END LOOP;
 52
 53    END IF;
 54
 55  END;
 56  /
Index :January is 1
Index :February is 2
Index :March is 3
Index :April is 4
Index :May is 5
Index :June is 6
Index :July is 7
Index :August is 8
Index :April is 4
Index :August is 8
Index :February is 2
Index :January is 1
Index :July is 7
Index :June is 6
Index :March is 3
Index :May is 5
PL/SQL procedure successfully completed.
SQL>