Oracle PL/SQL Nested Tables

·

PL/SQL Records PL/SQL TablesPL/SQL Varrays

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 table can 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.
Example 1 of Pl/SQL Nested Table

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’))



Live Traffic Feed

About this blog

Site Sponsors