Bonjour,

je rempli un tableau de la manière suivante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
DECLARE
 
TYPE myTableType IS TABLE OF NUMBER INDEX BY LONG;
myTable myTableType;
 
BEGIN
 
FOR C1 IN (SELECT p.householdid hhId, MAX(p.PROFILID)+1 maxP
FROM PROFIL p JOIN household h
on p.householdid = h.householdid
WHERE h.householddept = 75
GROUP BY p.HOUSEHOLDID) LOOP
 
myTable(C1.hhId) := C1.maxP;
 
IF myTable.exists(3) then
 
dbms_output.put_line('Valeur : ' || myTable(3));
 
ELSE
dbms_output.put_line('Valeur non trouvée');
 
END IF;
 
 
END LOOP;
 
END;
Comme vous pouvez le voire, l'indice du tableau n'est pas n, n+1, (n+1)+1... mais l'indice prend la valeur d'un identifiant de table et la valeur de la colonne courante du tableau, la valeur max(profilid).

Mon code fonctionne mais je voulais savoir si il y avait une meilleur façon de remplir mon tableau du genre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
DECLARE

TYPE myTableType IS TABLE OF NUMBER INDEX BY LONG;
myTable myTableType;

BEGIN

SELECT MAX(p.PROFILID)+1 maxP
BULK COLLECT INTO myTable(p.HOUSEHOLDID)
FROM PROFIL p JOIN household h
on p.householdid = h.householdid
WHERE h.householddept = 75
GROUP BY p.HOUSEHOLDID;

myTable(C1.hhId) := C1.maxP;

IF myTable.exists(3) then

dbms_output.put_line('Valeur : ' || myTable(3));

ELSE
dbms_output.put_line('Valeur non trouvée');

END IF;

END;
Merci d'avance de l'aide que vous pourriez m'apporter.