PL/SQL provides two composite datatypes: TABLE and RECORD.
Objects of the type table are called PL/SQL tables, which are modeled as database tables.
PL/SQL tables use a primary key for array-like access to rows. These tables can have one column and a primary key. Neither the column nor the primary key can be user defined. The size of a PL/SQL table is unconstrained; that is, the table size grows dynamically as new rows are added.
Using PL/SQL tables
Declaration is done in two steps. First, define a table type, then declare PL/SQL tables of that type.
Table types can be declared within the declarative part of any block, subprogram, or package.
To reference the rows within a PL/SQL table, a primary key value must be specified using the array-like syntax, as shown in this diagram:
The following graphic shows an example of declaring a PL/SQL table:
A PL/SQL table method is a built-in procedure or function that you can use with any PL/SQL table.
The method is called using the dot notation:
table_name.method_name [(parameters)]
The following series of images describes PL/SQL table methods.
FIRST and LAST Methods
Use the FIRST and LAST methods with nested tables, associative arrays, and VARRAYs to return, respectively, the lowest and highest index values defined in the collection. For string-indexed associative arrays, these methods return strings; “lowest” and “highest” are determined by the ordering of the character set in use in that session. For all other collection types, these methods return integers. The specifications for these functions follow.
FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2;
FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2;
For example, the following code scans from the start to the end of my collection:
FOR indx IN holidays.FIRST .. holidays.LAST
LOOP
send_everyone_home (indx);
END LOOP;
This kind of loop will only work if the collection is densely populated. In the next example, I use COUNT to concisely specify that I want to append a row to the end of an associative array. I use a cursor FOR loop to transfer data from the database to an associative array of records. When the first record is fetched, the companies collection is empty, so the COUNT operator will return 0.
FOR company_rec IN company_cur
LOOP
companies ((companies.COUNT) + 1).company_id
company_rec.company_id;
END LOOP;
Boundary considerations:
FIRST and LAST return NULL when they are applied to initialized collections that have
no elements. For VARRAYs, which have at least one element, FIRST is always 1, and
LAST is always equal to COUNT.
Exceptions possible:
If FIRST and LAST are applied to an uninitialized nested table or a VARRAY, they raise
the COLLECTION_ IS_NULL predefined exception.
The EXISTS(n) method returns TRUE if the nth element within the PL/SQL table exists.
The COUNT method returns the number of elements that the PL/SQL table currently contains.
The FIRST LAST method returns the first and last (smallest and largest) index numbers within the PL/SQL table.
This method returns NULL if the PL/SQL table is empty.
Example of the FIRST LAST method continued.
The PRIOR(n) method returns the index number that precedes index n within the PL/SQL table.
The NEXT method returns the index number that succeeds index n within a PL/SQL table
The EXTEND (n,i) method increases the size of the PL/SQL table.
The TRIM method removes one element from the end of the PL/SQL table.
The DELETE method removes all the elements from the PL/SQL table.
In the next lesson, you will learn how to create a PL/SQL record.