--Esempio di NESTED TABLE
DECLARE
  CURSOR C_CLIENTI
  IS
    SELECT
      AA.*
    FROM
      (
        SELECT
          A.NOME
          || ' '
          || A.COGNOME AS NOMINATIVO
        FROM
          CLIENTI A
        JOIN
          (
            SELECT
              CODFID,
              COUNT( * )  AS NUMSPESE,
              SUM(TOTALE) AS VALTOT
            FROM
              SCONTRINI
            GROUP BY
              CODFID
          )
        B
      ON
        A.CODFIDELITY = B.CODFID
      WHERE
        B.NUMSPESE  > 0
      AND B.CODFID <> - 1
      ORDER BY
        B.VALTOT DESC
      )
      AA
    WHERE
      ROWNUM <= 10;

    --CREAZIONE NUOVA NESTED TABLE
  TYPE NOMINATIVO_TYPE
IS
  TABLE OF VARCHAR2(100);
  NOMINATIVO_TAB NOMINATIVO_TYPE := NOMINATIVO_TYPE();

  V_INDEX PLS_INTEGER            := 0;

BEGIN
  FOR R_CLIENTI IN C_CLIENTI
  LOOP
    V_INDEX := V_INDEX + 1;

    NOMINATIVO_TAB.EXTEND;
    NOMINATIVO_TAB(V_INDEX) := R_CLIENTI.NOMINATIVO;

    DBMS_OUTPUT.PUT_LINE ('RECORD(' || V_INDEX || '): ' || ' ' || NOMINATIVO_TAB(V_INDEX));

  END LOOP;

  NOMINATIVO_TAB.EXTEND;
  NOMINATIVO_TAB(11) := 'NICOLA LA ROCCA';

  IF NOMINATIVO_TAB.EXISTS(11) THEN
    DBMS_OUTPUT.PUT_LINE ('RECORD(' || 11 || '): ' || NOMINATIVO_TAB(11));
  END IF;


  NOMINATIVO_TAB.EXTEND;
  IF NOMINATIVO_TAB.EXISTS(12) THEN
    DBMS_OUTPUT.PUT_LINE ('RECORD(' || 12 || '):' || NOMINATIVO_TAB(12));
  END IF;

  DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT);

  NOMINATIVO_TAB.DELETE(12);

  DBMS_OUTPUT.PUT_LINE ('Numero Totale Record: ' || NOMINATIVO_TAB.COUNT);

  DBMS_OUTPUT.PUT_LINE ('Primo Record: ' || NOMINATIVO_TAB.FIRST);
  DBMS_OUTPUT.PUT_LINE ('Ultimo Record: ' || NOMINATIVO_TAB.LAST);

  NOMINATIVO_TAB.TRIM(3);

  FOR i IN 1..NOMINATIVO_TAB.LAST
  LOOP
    DBMS_OUTPUT.PUT_LINE ('RECORD(' || i || '): ' || ' ' || NOMINATIVO_TAB(i));
  END LOOP;


END;