PL/SQL provides three collection types: associative arrays, nested tables, and variable-size arrays. Associative arrays use keys to access unbounded elements, nested tables are like one-dimensional arrays with an arbitrary number of elements, and variable-size arrays store a fixed number of elements in sequential order. Both associative arrays and nested tables can have object types as elements, but only nested tables can be stored in database columns.