ORA-06532 is raised when PL/SQL code uses a collection index outside the range the collection type allows. With a varray, that means extending it past its declared maximum size, or using an index outside it. Index 0 or a negative index of a nested table or varray raises it too. The predefined exception is SUBSCRIPT_OUTSIDE_LIMIT. Check the varray's LIMIT before extending, or use a type without a fixed maximum.
Reproduce the Error
A varray of three seats is already full:
Example:
declare
type seat_list is varray(3) of varchar2(4);
v_seats seat_list := seat_list('1A', '1B', '1C');
begin
v_seats.extend;
end;
/
declare
type seat_list is varray(3) of varchar2(4);
v_seats seat_list := seat_list('1A', '1B', '1C');
begin
v_seats(0) := '1D';
end;
/Output:
declare * ERROR at line 1: ORA-06532: subscript outside of limit ORA-06512: at line 5 declare * ERROR at line 1: ORA-06532: subscript outside of limit ORA-06512: at line 5
The first block extends past the limit of 3; the second uses index 0, which no varray or nested table has.
Fix: Check LIMIT Before EXTEND
Example:
set serveroutput on
declare
type seat_list is varray(3) of varchar2(4);
v_seats seat_list := seat_list('1A', '1B');
begin
if v_seats.count < v_seats.limit then
v_seats.extend;
v_seats(v_seats.last) := '1C';
end if;
if v_seats.count < v_seats.limit then
v_seats.extend;
else
dbms_output.put_line('Full: ' || v_seats.count || ' of ' || v_seats.limit);
end if;
end;
/Output:
Full: 3 of 3 PL/SQL procedure successfully completed.
The first EXTEND fits, as the varray holds two of three elements; the second is skipped because COUNT has reached LIMIT.
Things to Know
- When the number of elements is not known in advance, use a nested table, which has no maximum size.
- Indexes of varrays and nested tables start at 1.
- An index within the limit but above COUNT raises ORA-06533 instead.
Related Guides
Conclusion
ORA-06532 means an index or EXTEND went beyond what the collection type allows. Compare COUNT with LIMIT before extending a varray, start indexes at 1, or switch to a nested table when the size can grow.
