En PL/SQL los arrays también son conocidos como associative arrays o index-by tables, los cuales no están limitados por un número de posiciones dada.
Cualquier posición del array se puede usar para guardar valores, no hay necesidad de que tengan secuencialidad.
Estos arrays también pueden usar índices negativos y si se intenta leer el dato de una posición no inicializada se genera un error NO DATA FOUND.

Donde:
A continuación, veremos los métodos que pueden utilizar esta clase de arreglos.
Ejemplo:
Escribimos el siguiente código en PL/SQL.

Notemos que luego de crear la tabla tipo_ejemplo, debemos declarar una variable de ese tipo que en este caso es mi_ejemplo.
Al ejecutar el código anterior nos imprimirá en pantalla lo siguiente:

Es un tipo de dato compuesto que puede contener varios valores de tipo de dato escalar o tipo de dato compuesto.
Los Recrods se utilizan para tratar como unidad lógica tipos de distintos que guardan relación. Este tipo de dato compuesto debe contener uno o más componentes (llamados campos) de cualquier tipo: escalar, Record o INDEX BY table.
Los Records tienen una estructura muy similar al de la mayoría de lenguajes de programación de tercera generación (FORTRAN, ALGOL, entre otros), también son definidos por el usuario y pueden ser un sobconjunto de una fila de una tabla.
Un Record es un grupo de elementos de datos relacionados almacenados en campos, cada campo con su propio nombre y tipo de datos:
Adicionalmente existe otro tipo de dato compuesto que son las Colecciones y estos están clasificados en tres tipos:

Donde:
Se recomienda usar los Records cuando se quiere guardar valores de diferentes tipos de datos que están relacionados lógicamente. Un ejemplo puede ser crear un RECORD que contenga todos los detalles del empleado y están relacionados lógicamente porque proporcionan información de éste.
Mientras que las Colecciones se usan cuando se desea almacenar valores del mismo tipo de dato. Tener en cuenta que este tipo de dato también puede ser de tipo compuesto (como, por ejemplo, RECORD).
Ejemplo:
Usamos la información que tenemos de la tabla EMPLEADO.

Ahora procedemos a crear un RECORD con nombre record_empleado el cual almacenará todos los atributos del empleado. Luego creamos un cursor llamado cursor_empleado que recuperará aquellos empleados que tienen un sueldo mayor o igual a 900000 y los mostrará en pantalla.

