--Esempio di collezione di record definiti dall'utente
DECLARE

  CURSOR CLIENTI_CUR
  IS
    SELECT
      CODFIDELITY,
      NOME
      || ' '
      || COGNOME AS NOMINATIVO,
      BOLLINI,
      PROV
    FROM
      VW_CLIENTI
    WHERE
      CODFIDELITY IN
      (
        SELECT DISTINCT
          CODFID
        FROM
          SCONTRINI
        GROUP BY
          CODFID
        HAVING
          SUM(BOLLINI) > 500
      )
  ORDER BY
    BOLLINI DESC;

TYPE BEST_CLIFID_RECORD
IS
  RECORD
  (
    CODFID     VARCHAR(20),
    NOMINATIVO VARCHAR2(100),
    BOLLINI    NUMBER,
    PROVINCIA  VARCHAR2(3) );

TYPE CLIFID_ARRAY_TYPE
IS
  TABLE OF BEST_CLIFID_RECORD INDEX BY PLS_INTEGER;

  CLIFID_TAB CLIFID_ARRAY_TYPE;
  V_INDEX INTEGER := 0;

BEGIN
  FOR CLIENTI_REC IN CLIENTI_CUR
  LOOP
    V_INDEX                        := V_INDEX + 1;

    CLIFID_TAB(V_INDEX).CODFID     := CLIENTI_REC.CODFIDELITY;
    CLIFID_TAB(V_INDEX).NOMINATIVO := CLIENTI_REC.NOMINATIVO;
    CLIFID_TAB(V_INDEX).BOLLINI    := CLIENTI_REC.BOLLINI;
    CLIFID_TAB(V_INDEX).PROVINCIA  := CLIENTI_REC.PROV;

    DBMS_OUTPUT.PUT_LINE ('Posizione: '|| V_INDEX);
    DBMS_OUTPUT.PUT_LINE ('NOMINATIVO: '||CLIFID_TAB(V_INDEX).NOMINATIVO);
    DBMS_OUTPUT.PUT_LINE ('CODFID: '||CLIFID_TAB(V_INDEX).CODFID);
    DBMS_OUTPUT.PUT_LINE ('BOLLINI: '||CLIFID_TAB(V_INDEX).BOLLINI);
    DBMS_OUTPUT.PUT_LINE ('Prov: '||CLIFID_TAB(V_INDEX).PROVINCIA);

  END LOOP;
END;