ORA 06533: Subscript beyond count

I created below simple block but getting

ORA 06533:Subscript beyond count

error.

Can someone please tell me what I am missing in below code.

declare type salaryvarray is varray(6) of customers.salary%type; salary_array salaryvarray:=salaryvarray(); c_salary customers.salary%type; i integer(2); counter number(2);
begin salary_array.extend; select count(*) into counter from customers; for i in 1..counter loop select salary into c_salary from customers where id =i; salary_array(i):=c_salary; end loop;
end;
/
4

4 Answers

The array_var.extend portion of the code needs to be inside the loop. Each time you add to it, you are allocating new memory. Skipping this step is asking the code to store something without giving it space.

declare type salaryvarray is varray(6) of customers.salary%type; salary_array salaryvarray:=salaryvarray(); c_salary customers.salary%type; i integer(2); counter number(2);
begin select count(*) into counter from customers; for i in 1..counter loop salary_array.extend; -- Extend for each value. select salary into c_salary from customers where id =i; salary_array(i):=c_salary; end loop;
end;
/

You will very likely run into a similar error soon, however, ORA-06532: Subscript outside of limit. You limit your VARRAY to 6 elements, but customers could potential have more. Consider limiting the return, expanding the VARRAY or implementing a more dynamic collection type.

Your select count(*) into counter from customers; has more than 6 results this way not able to save into varray(6) variable.

Instead of array, that has a fixed number of elements, you can use nested table or associative array.

Source: Declare dynamic array in PLSQL

salary_array.extend just extend 1 index. In Your case You must use this syntax for extend all index of varray:

salary_array.extend(6);

for other case use size of varray insted of 6 .

Your salary_array can hold a maximum of 6 customer's salary, but your select count(*) into counter from customers returns more than 6 records.

Due to this the array is not able to hold the data or to put in other words, An in-limit subscript was greater than the count of a varray.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like