Oracle PL/SQL Nested Tables
Nested tables are similar to index by table but these can be stored in database columns but index by tables cannot be stored in database columns.
A Nested tablecan be considered as a single-column table that can either be in memory, or as a column in a database table. A nested table is quite similar to a VARRAY with the exception that the order of the elements is not static. Elements can be deleted or added anywhere in the nested table where as a VARRAY can only add or delete elements from the end of the array. Nested Table is known as a sparse collection because a nested table can contain empty elements.
Nested tables are a superior choice when:
Example 2 of Pl/SQL Nested Table
Suppose we have a more complex beer type:
Create type BeerTableBrand as table of BeerBrand;
Define a relation of manufacturers that will nest their beers inside.
(Oracle maintains pointers between tables); you cannot refer to BeerTable in any query!
Inserting into nested table
insert into manfs values
(’Budweiser’,
AddrType(’LoopRoad’,’Boga’,’CA’,56789),
BeerTableBrand(
BeerBrand(’sweet’,’ale’,’yellow’),
BeerBrand(’sour’,’lager’,’pale’)
)
);
Querying the nested table
Example: List the beers made by Budweiser:
select beers from manfs
where name = ’Budweiser’;
This query gives you a single value that looks like this:
BeerTableBrand(
BeerBrand(’sweet’,’ale’,’yellow’),
BeerBrand(’sour’,’lager’,’pale’))
More on difference between Nested Table, Varray & Index-by Tables
(Click on the image to view full size)
Nested tables are similar to index by table but these can be stored in database columns but index by tables cannot be stored in database columns.
A Nested tablecan be considered as a single-column table that can either be in memory, or as a column in a database table. A nested table is quite similar to a VARRAY with the exception that the order of the elements is not static. Elements can be deleted or added anywhere in the nested table where as a VARRAY can only add or delete elements from the end of the array. Nested Table is known as a sparse collection because a nested table can contain empty elements.
Nested tables are a superior choice when:
- You need to delete or update some elements, but not all the elements at once.
- The index values are not consecutive.
- We don’t have any predefined upper bound for index values.
DECLARE TYPE n_tab_T IS TABLE OF NUMBER; nt n_tab_T := n_tab_T(); BEGIN FOR i IN 1..10 LOOP nt.EXTEND; nt(i) := i; END LOOP; END;
Example 2 of Pl/SQL Nested Table
Suppose we have a more complex beer type:
create type BeerBrand as object ( name char(20), kind char(10), color char(10) );We may create a type that is a nested table of objects of this type by:
Create type BeerTableBrand as table of BeerBrand;
Define a relation of manufacturers that will nest their beers inside.
create table manfs ( name char(30), addr AddrType, beers BeerTableBrand) nested table beers store as BeerTable;The last line in the create table statement indicates that the nested table is not stored "in-line" with the rest of the table
(Oracle maintains pointers between tables); you cannot refer to BeerTable in any query!
Inserting into nested table
insert into manfs values
(’Budweiser’,
AddrType(’LoopRoad’,’Boga’,’CA’,56789),
BeerTableBrand(
BeerBrand(’sweet’,’ale’,’yellow’),
BeerBrand(’sour’,’lager’,’pale’)
)
);
Querying the nested table
Example: List the beers made by Budweiser:
select beers from manfs
where name = ’Budweiser’;
This query gives you a single value that looks like this:
BeerTableBrand(
BeerBrand(’sweet’,’ale’,’yellow’),
BeerBrand(’sour’,’lager’,’pale’))
More on difference between Nested Table, Varray & Index-by Tables
(Click on the image to view full size)