web-dev-qa-db-fra.com

ORA 06533: indice au-delà du décompte

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;
/
7
Bhushan

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.

8
Chris Hep

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 .

Source: Déclarer un tableau dynamique dans PLSQL

2
Fabio Farath

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.

1
Shankar