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 :

Error PLS-00103 dans une procédure stockée


Sujet :

Oracle

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut Error PLS-00103 dans une procédure stockée
    Bonjour dans le cadre d'un TP sous Oracle.
    Je butte sur un problème depuis un bout de temps et l'erreur suivante :
    ERROR at line 17: PLS-00103: Encountered the symbol ";"

    Je ne vois pas à quoi c'est due, il me semble pourtant que la syntaxe de ma requête est bonne. Cela ne doit pâs être trop compliqué pourtant, mais je galère. Et votre aide me serait très utile pour continuer mon TP
    Merci


    Voici ma procédure


    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
    create or replace Procedure RetourExemplaires (liste IN listeExemplaires)
        IS
      listeExemplairesRendus listeExemplaires;
    	NumExemplaire NUMBER;
     	i NUMBER;
     
       	BEGIN
     
       	i:=0;
        listeExemplairesRendus := liste;
         	     for i in listeExemplairesRendus.first..listeExemplairesRendus.last loop
            	   NumExemplaireCourant:= listeExemplairesRendus(i) ;
             	   UPDATE EXEMPLAIRE SET EtatEmprunte=0 where NumeroInventaire=NumExemplaireCourant;
           	 end loop;   
           	 commit; 
    END RetourExemplaires;
    Et la structure de la table et du type nécessaire au bon fonctionnement de ma procédure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Create table Exemplaire
    (
    	NumeroInventaire int PRIMARY KEY, 
    	ISBN varchar(15),
    	EtatEmprunte int default(0),
    	constraint FKExemplaire foreign key (ISBN) references Livre(ISBN) initially deferred,
    	constraint CBoolean CHECK  (EtatEmprunte between 0 AND 1)
    );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    CREATE or replace  type listeExemplaires as
    VARRAY(10) OF Number(10);

  2. #2
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Points : 1 197
    Points
    1 197
    Par défaut
    Bonjour ,

    Je comprends pas une chose, tu déclare s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NumExemplaire NUMBER;
    mais tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     NumExemplaireCourant:= listeExemplairesRendus(i) ;
    Il faut utiliser les mêmes variables au moment de la déclaration et l'affectation

  3. #3
    Membre actif
    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
    Points : 281
    Points
    281
    Par défaut
    Bonjour,

    "A part" l'incohérence que souligne salim11 chaque code pris individuellement semble correct.

    Il serait intéressant de connaître le contexte dans lequel apparaît ton erreur.
    Aucun des codes que tu montres ne fait 17 lignes.

    Est-ce que tu as mis tous ces codes à la suite dans un même fichier global que tu lances depuis sqlplus par exemple ? Peux tu en dire plus de ce coté ?

    Pz

  4. #4
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par salim11
    Je comprends pas une chose, tu déclare s
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    NumExemplaire NUMBER;
    mais tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     NumExemplaireCourant:= listeExemplairesRendus(i) ;
    Il faut utiliser les mêmes variables au moment de la déclaration et l'affectation
    Ca me semble correct (hormis un problème avec les noms d'un côté NumExemplaire et de l'autre NumExemplaireCourant), listeExemplairesRendus étant un tableau de number, listeExemplairesRendus (i) est bien du number, non ?

    T'es sûr de nous avoir donné le code exact ???
    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
    SQL> CREATE TABLE Exemplaire
      2  (
      3   NumeroInventaire int PRIMARY KEY,
      4   ISBN varchar(15),
      5   EtatEmprunte int DEFAULT(0));
    Table created.
     
    SQL> CREATE OR REPLACE  type listeExemplaires AS
      2  VARRAY(10) OF Number(10);
      3  /
    Type created.
     
    SQL>  CREATE OR REPLACE Procedure RetourExemplaires (liste IN listeExemplaires)
      2       IS
      3     listeExemplairesRendus listeExemplaires;
      4  NumExemplaireCourant NUMBER;
      5    i NUMBER;
      6    
      7      BEGIN
      8     
      9      i:=0;
     10      listeExemplairesRendus := liste;
     11             FOR i IN listeExemplairesRendus.first..listeExemplairesRendus.last loop
     12              NumExemplaireCourant:= listeExemplairesRendus(i) ;
     13               UPDATE EXEMPLAIRE SET EtatEmprunte=0 WHERE NumeroInventaire=NumExemplaireCourant;
     14           end loop;   
     15           commit; 
     16  END RetourExemplaires; 
     17  /
    Procedure created.
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 32
    Points : 28
    Points
    28
    Par défaut
    En effet, c'était bien cette petite erreur.
    Mais quand on fait des modifications permanentes, quand on y arrive pas. On fais parfois des "boulettes" et on ne voit plus des erreurs aussi bête.
    Meri quand même

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

Discussions similaires

  1. passage d'un nom de table dans une procédure stockée
    Par thierry V dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 26/07/2010, 16h48
  2. Saisie de données dans une procédure stockée
    Par Hastaroth dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 25/10/2004, 09h54
  3. Vérification du type de données dans une procédure stockée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 16/09/2004, 11h20
  4. Marquer une pause dans une procédure stockée
    Par PéPénet dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 08/11/2003, 10h42
  5. Transformation de date dans une procédure stockée
    Par bd0606 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 27/10/2003, 11h31

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