Starting with 12.1, you can now use the TABLE operator with associative arrays whose types are defined in a package specification. One really sweet application of this feature is to order the contents of your collection. Let's take a look Suppose I create these database objects: CREATE TABLE plch_employees ( employee_id INTEGER PRIMARY KEY, last_name VARCHAR2 (100) UNIQUE, salary NUMBER ) / BEGIN INSERT INTO plch_employees VALUES (100, 'Apramy', 1000); INSERT INTO plch_employees VALUES (175, 'Shipo', 2500); INSERT INTO plch_employees VALUES (242, 'Inkul', 500); END; / CREATE OR REPLACE PACKAGE plch_arrays IS TYPE employees_t IS TABLE OF plch_employees%ROWTYPE INDEX BY PLS_INTEGER; TYPE emps_by_name_t IS TABLE OF plch_employees%ROWTYPE INDEX BY plch_employees.last_name%TYPE; g_employees employees_t; END; / CREATE OR REPLACE PACKAGE BODY plch_arrays IS BEGIN SELECT * ...
For the last twenty years, I have managed to transform an obsession with PL/SQL into a paying job. How cool is that?