René Nyffenegger's collection of things on the web | |
René Nyffenegger on Oracle - Most wanted - Feedback
- Follow @renenyffenegger
|
Constructors for PL/SQL collection types | ||
Variables whose type is either nested table or varray must be initialized with a
constructor before they can be used.
On the other hand, there are no constructors needed (and also available) for index-by tables.
Simple form
In its simplest form, a constructor has the same name as its type and does not take any arguments:
declare type table_varchar is table of varchar2(10); type varray_varchar is varying array(20) of varchar2(10); var_table_varchar table_varchar; var_varray_varchar varray_varchar; begin var_table_varchar := table_varchar(); var_varray_varchar := varray_varchar(); end; / Constructor initializing some elements in the collection
The constructor can also be used to initialize some elements within the collection to a value:
declare type table_varchar is table of varchar2(10); type varray_varchar is varying array(20) of number; var_table_varchar table_varchar; var_varray_varchar varray_varchar; begin var_table_varchar := table_varchar('one', 'two', 'three', 'four'); var_varray_varchar := varray_varchar(1, 2, 3, 4, 5, 6); end; / Omitting the constructor
If the constructor is ommited and an element is being assigned to, an ORA-06531 is thrown:
declare type table_varchar is table of varchar2(10); var_table_varchar table_varchar; begin var_table_varchar(1) := 'one'; end; / ERROR at line 1: ORA-06531: Reference to uninitialized collection ORA-06512: at line 6 Index-by types
As already mentioned, index-by collections don't have a constructor; they can just be used:
|