J'ai créé un bloc simple en dessous mais
ORA 06533: indice au-delà du décompte
erreur.
Quelqu'un peut-il me dire ce qui me manque dans le code ci-dessous.
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;
/
Le array_var.extend
la partie du code doit être à l'intérieur de la boucle. Chaque fois que vous y ajoutez, vous allouez une nouvelle mémoire. Ignorer cette étape demande au code de stocker quelque chose sans lui donner d'espace.
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;
/
Vous rencontrerez très probablement une erreur similaire bientôt, cependant, ORA-06532: Subscript outside of limit
. Vous limitez votre VARRAY à 6 éléments, mais les clients pourraient en avoir plus. Envisagez de limiter le retour, d'étendre le VARRAY ou d'implémenter un type de collection plus dynamique.
Votre select count(*) into counter from customers;
a plus de 6 résultats de cette façon, impossible d'enregistrer dans la variable varray(6)
.
Au lieu de tableau, qui a un nombre fixe d'éléments, vous pouvez utiliser table imbriquée ou tableau associatif .
Votre salary_array
Peut contenir un maximum de 6 clients, mais votre select count(*) into counter from customers
renvoie plus de 6 enregistrements.
Pour cette raison, le tableau n'est pas en mesure de contenir les données ou de mettre en d'autres termes, un indice en limite était supérieur au nombre d'un varray.