Dear readers of our blog, we'd like to recommend you to visit the main page of our website, where you can learn about our product SQLS*Plus and its advantages.
 
SQLS*Plus - best SQL Server command line reporting and automation tool! SQLS*Plus is several orders of magnitude better than SQL Server sqlcmd and osql command line tools.
 

REQUEST COMPLIMENTARY SQLS*PLUS LICENCE

Enteros UpBeat offers a patented database performance management SaaS platform. It proactively identifies root causes of complex revenue-impacting database performance issues across a growing number of RDBMS, NoSQL, and deep/machine learning database platforms. We support Oracle, SQL Server, IBM DB2, MongoDB, Casandra, MySQL, Amazon Aurora, and other database systems.

Oracle Nested Tables

26 August 2020

 

Oracle Nested Tables

In Oracle PL/SQL Nested Tables is a column type that stores an unlimited row set in a certain order.

When you extract a nested table value from a database into a Nested Tables variable, PL/SQL produces rows of consecutive indexes starting with 1. Using these indexes, you can refer to individual rows of the Nested Tables variable.

Syntax to define and then declare a variable of type Nested Tables in Oracle PL/SQL

TYPE nt_type IS TABLE OF element_type [NOT NULL];
var_nt nt_type;

Parameters and arguments of the column type

  • nt_type is the type name used later to declare collections.
  • element_type – any PL/SQL data type, except: REF CURSOR
  • var_nt is a variable of Nested Tables type.

Note:

  • An uninitialized nested table variable is the zero collection.
  • You must initialize it, either by emptying it or by assigning it a value other than NULL.

An example of Nested Tables as a local type

Let’s consider an example of Oracle PL/SQL which defines a local nested table type Roster, declares a variable of this type names (initializes it with the constructor) and defines the print_names procedure which prints Nested Tables. (The procedure uses FIRST and LAST collection methods.)

The example calls the procedure three times: after initializing a variable, after changing the value of one element and after using the constructor to change the value of all elements. After calling the second constructor, the nested table has only two elements. The reference to element 3 will cause error ORA-06533.

DECLARE
TYPE Roster IS TABLE OF VARCHAR2(15); -- nested table type

-- is a nested table variable initialized by the constructor:

names Roster := Roster('D Caruso', 'J Hamil', 'D Piro', 'R Singh');

PROCEDURE print_names (heading VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(heading);

FOR i IN names.FIRST . names.LAST LOOP -- For the first element
DBMS_OUTPUT.PUT_LINE(names(i));
END LOOP;

DBMS_OUTPUT.PUT_LINE('---');
END;

BEGIN
print_names('Initial Values:');

names(3) := 'P Perez'; -- Change the value of one element
print_names('Current Values:');

names := Roster('A Jansen', 'B Gupta'); -- Change the whole table
print_names('Current Values:');
END;

As a result, we get:
Initial Values:
D Caruso
J Hamil
D Piro
R Singh
---
Current Values:
D Caruso
J Hamil
Perez
R Singh
---
Current Values:
A Jansen
B Gupta

The following example defines an offline stored nested table type, nt_type and an offline stored procedure for printing a variable of this print_nt type. (The procedure uses FIRST and LAST collection methods.)

An anonymous block declares a variable of nt_type, initializes it empty with the constructor and calls print_nt twice: after initializing the variable and after using the constructor to change values of all elements.

CREATE OR REPLACE TYPE nt_type IS TABLE OF NUMBER;

CREATE OR REPLACE PROCEDURE print_nt (nt nt_type) IS
i NUMBER;
BEGIN
i := nt.FIRST;

IF i IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is empty');
ELSE
WHILE i IS NOT NULL LOOP
DBMS_OUTPUT.PUT('nt.(' || i || ') = '); print(nt(i));
i := nt.NEXT(i);
END LOOP;
END IF;

DBMS_OUTPUT.PUT_LINE('---');
END print_nt;

DECLARE
nt nt_type := nt_type(); -- nested table variable initialized empty
BEGIN
print_nt(nt);
nt := nt_type(90, 9, 29, 58);
print_nt(nt);
END;
As a result:

nt is empty
---
nt.(1) = 90
nt.(2) = 9
nt.(3) = 29
nt.(4) = 58
---

Using Nested Tables

The nested table is suitable if:

  • The number of elements is not specified.
  • Index values are not consecutive.
  • You must remove or update some elements, but not all elements at once.

The Nested Tables shall be stored in a separate stored table, the database table generated by the System. When you access Nested Tables, the Nested Tables database connects to its stored table. This makes Nested Tables suitable for queries and updates that affect only certain items in the collection.

You must create a separate search table with multiple entries for each row of the main table and access it through join queries.

PL/SQL tutorial: How To Create Nested Table collection in PL/SQL Block

 
Tags: , , , , ,

MORE NEWS

 

Preamble​​NoSql is not a replacement for SQL databases but is a valid alternative for many situations where standard SQL is not the best approach for...

Preamble​​MongoDB Conditional operators specify a condition to which the value of the document field shall correspond.Comparison Query Operators $eq...

5 Database management trends impacting database administrationIn the realm of database management systems, moreover half (52%) of your competitors feel...

The data type is defined as the type of data that any column or variable can store in MS SQL Server. What is the data type? When you create any table or...

Preamble​​MS SQL Server is a client-server architecture. MS SQL Server process starts with the client application sending a query.SQL Server accepts,...

First the basics: what is the master/slave?One database server (“master”) responds and can do anything. A lot of other database servers store copies of all...

Preamble​​Atom Hopper (based on Apache Abdera) for those who may not know is an open-source project sponsored by Rackspace. Today we will figure out how to...

Preamble​​MongoDB recently introduced its new aggregation structure. This structure provides a simpler solution for calculating aggregated values rather...

FlexibilityOne of the most advertised features of MongoDB is its flexibility.  Flexibility, however, is a double-edged sword. More flexibility means more...

Preamble​​SQLShell is a cross-platform command-line tool for SQL, similar to psql for PostgreSQL or MySQL command-line tool for MySQL.Why use it?If you...

Preamble​​Writing an application on top of the framework on top of the driver on top of the database is a bit like a game on the phone: you say “insert...

Preamble​​Oracle Coherence is a distributed cache that is functionally comparable with Memcached. In addition to the basic function of the API cache, it...

Preamble​​IBM pureXML, a proprietary XML database built on a relational mechanism (designed for puns) that offers both relational ( SQL / XML ) and...

  What is PostgreSQL array? In PostgreSQL we can define a column as an array of valid data types. The data type can be built-in, custom or enumerated....

Preamble​​If you are a Linux sysadmin or developer, there comes a time when you need to manage an Oracle database that can work in your environment.In this...

Preamble​​Starting with Microsoft SQL Server 2008, by default, the group of local administrators is no longer added to SQL Server administrators during the...