Utilisation d'un tableau IS TABLE OF
Bonjour,
je rempli un tableau de la manière suivante :
Code:
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:
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.