IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

procedure + exception oracle


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut 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 : 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
    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.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Par défaut Hum
    Bonjour,

    A priori votre compilateur doit indiquer quelle partie est en erreur.

    Si c'est trop compliqué construisez votre procédure petit à petit en compilant toutes la trois lignes ajoutées. 60 lignes d'un coup pour un début c'est trop ambitieux.

    Sinon quelques pistes :
    - Vérifiez que toutes les variables sont déclarées (y compris les booléens)
    - La structure de la conditionnelle est toujours la même. Or elle varie dans votre procédure.
    - Une faute de frappe dans l'init de votre variable à 0 (l'assignation c'est := en plsql)
    - Enfin il faut autant de end if que de if.

    Courage.
    Pozzo

  3. #3
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    faire un show errors après la compilation pour avoir l'erreur et la ligne impactée.

  4. #4
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    y'a aussi la vue USER_ERRORS qui va donner les détails.

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2010
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 4
    Par défaut
    le problème se trouve au niveau de la 17ème ligne, quand je fait show errors il me dit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    17/2     PL/SQL: Statement ignored
    17/5     PLS-00324: attribut de curseur ne doit pas être appliqué à
             'V_ENREG' non-curseur

  6. #6
    Membre émérite Avatar de plabrevo
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    548
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 548
    Par défaut
    Et en remplacant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	IF(v_enreg%notfound)then
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	IF(catch_curs%notfound)then
    ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/11/2006, 16h52
  2. Réponses: 6
    Dernier message: 09/10/2006, 11h58
  3. Réponses: 1
    Dernier message: 31/01/2006, 17h38
  4. Executer un procedure d'oracle sous unix
    Par claralavraie dans le forum Applications et environnements graphiques
    Réponses: 8
    Dernier message: 31/01/2006, 17h34
  5. Gestion des exceptions Oracle
    Par kluh dans le forum Access
    Réponses: 1
    Dernier message: 15/11/2005, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo