procedure + exception oracle
bonjour ,
j'ai crée une procédure mais à chaque fois sql*plus me donne un avertissement comme quoi procédure a été créée avec erreurs de compilation...aidez moi à trouver l'erreur please...
Au fait je dois créer la procédure suivante:
procedure reserver(ncli number, nom_hotel varchar, la_ville varchar, catch number,nbp number, deb_res char, fin_res char, out OK boolean)
qui effectue pour le client de clé ncli, et pour nbp personnes, la réservation d’une chambre de catégorie catch dans l’hôtel de nom nom_hotel de la ville de la_ville, pour la période définie par deb_res et fin_res. Si l’hôtel n’existe pas, l’exception HOTEL_INCONNU sera levée. Si la réservation est impossible, le paramètre en mode de sortie OK sera positionné à FAUX. La date de réservation sera naturellement la date du jour (SYSDATE en ORACLE). On supposera l’existence d’une séquence nommée seq_reserv pour attribuer un nouveau numéro de réservation.
voici le code pl/sql:
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
|
--Creation de la sequence
create sequence seqReserv start with 17 ;
--Creation de la procedure
create or replace procedure reserver(ncli number, nom_hotel varchar, la_ville varchar, catch number,nbp number,
deb_res date, fin_res date, out OK boolean)
is
cursor catch_curs is select ch.numch,ch.numh from chambres ch,hotels h
where ch.numh=h.numh and ch.categorie=catch and h.nomh=nom_hotel and h.ville=la_ville;
v_enreg catch_curs%rowtype;
v_testeur boolean;
v_insert integer :0;
HOTEL_INCONNU exception;
begin
open catch_curs;
fetch catch_curs into v_enreg;
if(v_enreg%notfound)then
raise HOTEL_INCONNU;
else
while(v_enreg%found)
loop
v_testeur:=est_libre(v_enreg.numh, v_enreg.numch, deb_res, fin_res);
if(v_testeur) then
insert into reservations values(seqReserv.nextval,SYSDATE,deb_res,deb_res,nbp,ncli,v_enreg.numh,v_enreg.numch);
v_insert :=1;
exit;
end if;
fetch catch_curs into v_enreg;
end loop;
close catch_curs;
if(v_insert=1)
OK:=true;
else
OK:=false;
end if;
exception
when HOTEL_INCONNU then
dbms_output.put_line('Désole, lhotel que vous demandez n existe pas.');
end;
end;
/ |
function est_libre(nh number, nch number, d number, f number) est une fonction que j'ai déjà créé elle retourne VRAI si la chambre numéro nch de l’hôtel nh est libre entre les dates d et f, et FAUX dans le cas contraire.
merci.