Preamble
In Oracle PL/SQL Varray (an array with variable size) is an array whose number of elements can vary from zero (empty) to the declared maximum size.
To access a Varray element, use the variable_name(index) syntax:
- The lower boundary of the index is 1; the upper boundary is the current number of elements.
- The upper limit changes when the elements are added or removed, but it cannot exceed the maximum size.
When you store and extract a varray from the database, its indexes and the order of the elements remain stable.
Syntax to define and then declare a Varrays type variable in Oracle PL/SQL
TYPE type_varray IS {VARRAY | VARYING ARRAY} (size_limit) OF element_type [NOT NULL];
v_arr type_varray;
Parameters and arguments of the array
- type_varray – name of type Varray
- element_type – any PL/SQL data type, except for REF CURSOR
- size_limit is a positive integer literal representing the maximum number of elements in the array.
- v_arr – the name of a variable of the Varray type
Note:
- When defining a Varray type, you must specify its maximum size.
An example of how to use Varray in Oracle PL/SQL
DECLARE
TYPE Foursome IS VARRAY(4) OF VARCHAR2(15); -- Varray type
-- is a varray variable initialized by the constructor:
team Foursome := Foursome('John', 'Mary', 'Alberto', 'Juanita');
PROCEDURE print_team (heading VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(heading);
FOR i IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE(i) || '.' || team(i));
END LOOP;
DBMS_OUTPUT.PUT_LINE('---');
END;
BEGIN
print_team('2001 Team:');
team(3) := 'Pierre'; -- Change the values of the two elements
team(4) := 'Yvonne';
print_team('2005 Team:');
-- Call the constructor to assign new values to the Varray variable:
team := Foursome('Arun', 'Amitha', 'Allan', 'Mae');
print_team('2009 Team:');
END;
As a result, we get:
2001 Team:
1.John
2.Mary
3.Alberto
4.Juanita
---
2005 Team:
1.John
2.Mary
3.Pierre
4.Yvonne
---
2009 Team:
1.Arun
2.Amitha
3.Allan
4.Mae
---
In this example we defined Foursome as a local Varray type, declared a team variable of this type (initialized by the constructor) and defined the print_team procedure which printed Varray. The example calls the procedure three times:
- after initializing the variable,
- after changing values of two elements separately,
- and after using the constructor to change the value of all elements.
Using Varray
Varray should be used when:
- You know the maximum number of elements.
- You access the elements in sequence.
- Since you must store or retrieve all elements simultaneously, Varray may not be practical for a large number of elements.
PL/SQL tutorial: VARRAYs in Oracle Database
About Enteros
Enteros offers a patented database performance management SaaS platform. It proactively identifies root causes of complex business-impacting database scalability and performance issues across a growing number of clouds, RDBMS, NoSQL, and machine learning database platforms.
The views expressed on this blog are those of the author and do not necessarily reflect the opinions of Enteros Inc. This blog may contain links to the content of third-party sites. By providing such links, Enteros Inc. does not adopt, guarantee, approve, or endorse the information, views, or products available on such sites.
Are you interested in writing for Enteros’ Blog? Please send us a pitch!
RELATED POSTS
How Can SaaS Companies Detect Database Performance Issues Across Multi-Tenant Environments?
- 18 September 2026
- Database Performance Management
SaaS companies can detect database performance problems across multi-tenant environments by continuously monitoring tenant workloads, SQL activity, resource consumption, query latency, database waits, locking, transaction volume, and unusual workload patterns. Effective SaaS database performance monitoring helps teams identify resource-heavy tenants, detect emerging bottlenecks, investigate inefficient SQL, and maintain consistent application performance as customer activity grows. … Continue reading “How Can SaaS Companies Detect Database Performance Issues Across Multi-Tenant Environments?”
How Can Airlines Prevent Database Bottlenecks During Peak Booking and Check-In Periods?
Airlines can prevent database bottlenecks during peak booking and check-in periods by continuously monitoring SQL workloads, database latency, resource utilization, wait events, locks, transaction volumes, and unusual workload changes. Effective airline database performance monitoring helps IT teams detect emerging problems early, identify their root causes, optimize inefficient queries, and prepare database capacity before passenger demand … Continue reading “How Can Airlines Prevent Database Bottlenecks During Peak Booking and Check-In Periods?”
How Can Telecom IT Teams Monitor Database Performance Across Complex Network Environments?
- 17 September 2026
- AIDatabase Performance Management
Telecom IT teams can monitor complex database environments by combining real-time observability, SQL analysis, workload baselines, anomaly detection, capacity monitoring, and root cause analysis. Effective telecom database performance monitoring gives teams centralized visibility across distributed systems. With strong database performance management, Enteros helps identify bottlenecks, analyze workloads, improve reliability, and detect emerging performance risks before … Continue reading “How Can Telecom IT Teams Monitor Database Performance Across Complex Network Environments?”
How Can Retail IT Teams Prevent Database Problems From Affecting Online Orders?
Retail IT teams can protect online orders by continuously monitoring SQL queries, latency, waits, locks, transactions, and infrastructure health. Strong Retail Database Performance practices help detect bottlenecks before they disrupt carts, checkout, inventory, or payments. AI database monitoring for retail adds anomaly detection and predictive insights, while Enteros helps teams diagnose issues faster and maintain … Continue reading “How Can Retail IT Teams Prevent Database Problems From Affecting Online Orders?”