Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Sql*Plus
Sql*Plus Forum d'entraide sur Oracle Sql*Plus
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2010, 19h18   #1
Invité régulier
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 6
Points : 6
Par défaut Variable de substitution SQL*Plus

Bonjour,

Voilà j'ai un petit souci à exécuter ce code (que j'ai allégé pour faciliter la lecture):

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
ACCEPT nb PROMPT'Saisir un nombre : ' 
SET VERIFY OFF 
 
DECLARE 
 nbescales number(1) := &nb; 
 mauvaisesaisie exception; 
BEGIN 
 IF (nb < 8) AND  (nb > 1) THEN 
    Mes instruction à executer; 
 ELSE 
  RAISE mauvaisesaisie; 
 END IF; 
 
EXCEPTION     
 WHEN mauvaisesaisie THEN 
      DBMS_OUTPUT.PUT_LINE('La saisie doit etre un chiffre compris entre 1 et 8'); 
 WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE('Une erreur s est produite');      
END;

Le problème est que je n'arrive pas à faire entrer la saisie dans une variable et la réutiliser ensuite. A chaque fois j'ai le message une erreur s'est produite, ce qui veux dire que le problème ne vient pas de la comparaison mais certainement du typage. J'avais fait un autre mini-programme qui testait un (oui/non) sur un caractère; même problème.
J'ai essayé avec d'autres types, en enlevant le nombre de caractères entre parenthèse, en effectuant le test directement sur &nb ... rien,rien,rien
J'ai cherché des solutions mais là je commence à me taper la tête contre les murs.
Merci par avance du temps que vous consacrerez à mon problème.
BadCommand est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 20h32   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Code :
1
2
3
4
5
> @test.sql
Saisir un nombre : 3
OK
 
PL/SQL procedure successfully completed.
avec test.sql :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
ACCEPT nb PROMPT 'Saisir un nombre : ' 
SET VERIFY OFF
DECLARE 
 nbescales number(1) := to_number(&nb); 
 mauvaisesaisie exception; 
BEGIN 
 IF (nbescales < 8) AND  (nbescales > 1) THEN 
    DBMS_OUTPUT.PUT_LINE('OK');
 ELSE 
  RAISE mauvaisesaisie; 
 END IF;
EXCEPTION
 WHEN mauvaisesaisie THEN 
      DBMS_OUTPUT.PUT_LINE('La saisie doit etre un chiffre compris entre 1 et 8'); 
 WHEN OTHERS THEN 
       DBMS_OUTPUT.PUT_LINE('Une erreur s est produite');
END;
/
[EDIT]Au fait dans ton code de démo tu utilises nb < 8 au lieu de nbescales < 8 la variable déclarée dans le script (et j'ai rajouté un to_number)
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 22h31   #3
Invité régulier
 
Inscription : décembre 2010
Messages : 7
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 7
Points : 6
Points : 6
Citation:
Envoyé par skuatamad Voir le message

[EDIT]Au fait dans ton code de démo tu utilises nb < 8 au lieu de nbescales < 8 la variable déclarée dans le script (et j'ai rajouté un to_number)
Merci beaucoup, c'était donc bien un problème de typage... pour le nbescales, c'est un oubli quand j'ai allégé le code pour le poster.
Je teste ça et le sujet comme résolu dès que c'est fait.
Encore merci.
BadCommand est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h34.


 
 
 
 
Partenaires

Hébergement Web