Bonsoir tout le monde,
Je suis en train de faire la gestion des réservations de terrains de tennis
Je viens de faire une procédure stockée afin de récupérer toutes les disponibilitées sur 1 mois, cependant il y a un soucis sur ma procédure.En fait, elle ne boucle pas, on a l'impression qu'elle ne s'arrête jamais. A chaque fois je dois arrêter en faisant un ctrl+alt+suppr.
Voici mon code pl/sql:
create or replace procedure disponible as
cursor c_reservation is SELECT libTerrain, heureRéserver, dateRéserver
FROM adhérents, terrains , réserver
WHERE numAdhérent = numAdhérentRéserver
AND numTerrainRéserver = numTerrain
AND dateRéserver BETWEEN sysdate and (ADD_MONTHS (SYSDATE, +1))
order by libTerrain desc,dateRéserver desc, heureRéserver;
v_libTerrain terrains.libTerrain%type;
v_heureReserver réserver.heureRéserver%type;
v_dateReserver réserver.dateRéserver %type;
dateCourante date;
libTerrainCourant varchar2(50);
heureReserverCourant number;
type tabHoraire is varray (6) of number;
lesHoraires tabHoraire := tabHoraire(10,11,12,13,14,15);
j number;
type tabReserver is varray (6) of number;
resa tabReserver := tabReserver();
i number := 0;
heureResaTempo number;
horaireTempo number;
k number;
nbr number := 0;
horaireExist boolean := false;
table_disponible number := 0;
BEGIN
select count(*) into table_disponible from user_tables where upper(table_name) = 'horaire_disponible';
if table_disponible = 1 then
execute immediate 'TRUNCATE TABLE horaire_disponible';
end if;
open c_reservation;
fetch c_reservation into v_libTerrain, v_heureReserver, v_dateReserver;
while c_reservation%found
loop
dateCourante := v_dateReserver;
libTerrainCourant := v_libTerrain;
heureReserverCourant := v_heureReserver;
i := 1;
while c_reservation%found and dateCourante = v_dateReserver and libTerrainCourant = v_libTerrain
loop
resa.extend;
resa(i) := v_heureReserver;
i := i + 1;
fetch c_reservation into v_libTerrain, v_heureReserver, v_dateReserver;
end loop;
nbr := resa.count;
j := 1;
while j <= 6
loop
horaireTempo := lesHoraires(j);
k := 1;
while k <= nbr and horaireExist = false
loop
heureResaTempo := resa(k);
if horaireTempo = heureResaTempo then
horaireExist := true;
else
k := k + 1;
end if;
end loop;
end loop;
if horaireExist = false then
INSERT INTO horaire_disponible (terrainDispo, dateDispo, heureDispo) values (libTerrainCourant,dateCourante,horaireTempo);
else
horaireExist := false;
end if;
j := j + 1;
end loop;
close c_reservation;
END;
Merci pour votre aide
Configuration: Windows XP
Firefox 3.0.8