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

PL/SQL Oracle Discussion :

Création de procédure impossible - PLS-00103: Encountered the symbol "end-of-file" [11gR2]


Sujet :

PL/SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 992
    Points : 2 498
    Points
    2 498
    Par défaut Création de procédure impossible - PLS-00103: Encountered the symbol "end-of-file"
    Bonjour,

    Je viens vers vous car je m'arrache mes quelques rares cheveux avec, je suis sur, une broutille

    Voici un code qui marche bien.
    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
    set feedback off
    set serveroutput on
     
    /* On cherche le nombre de personnes exerçant le metier passe en parametre. */
    /* Declaration d'une variable car v_n_nb sera passee en parametre de type IN OUT a la procedure */
    DECLARE
    v_n_nb NUMBER;
     
    /* Pas de CREATE OR REPLACE sinon erreurs de compilation */
    PROCEDURE proc_nb_job (v_s_job IN VARCHAR2, v_n_nb IN OUT NUMBER) IS
    BEGIN
            SELECT count(*) INTO v_n_nb FROM emp WHERE job=v_s_job;
     
            /* Recherche des noms des personnes */
            CASE v_n_nb
            WHEN 0 then
                    DBMS_OUTPUT.PUT_LINE('Aucune personne n''occupe le poste de ' || v_s_job || '.');
            WHEN 1 then
                    DBMS_OUTPUT.PUT_LINE('Une seule personne occupe le poste de ' || v_s_job || '.');
            ELSE
                    DBMS_OUTPUT.PUT_LINE(v_n_nb || ' personnes occupent le poste de ' || v_s_job || '.');
            END CASE;
    END;
     
     
    BEGIN
    /* Initialisation de la variable et appel de la procedure avec saisie par l'utilisateur du metier */
    v_n_nb := 0;
    proc_nb_job('&METIER', v_n_nb);
     
    END;
    /
    Si je l'execute sous SQL*Plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SQL> @toto
    Enter value for metier: MANAGER
    3 personnes occupent le poste de MANAGER.

    Là où je ne comprends plus rien, c'est quand je supprime l'appel à ma procédure dans mon fichier; mon objectif est dans ce cas de juste créer la procédure et de l'appeler dans un autre script sql ou sous SQL*Plus.
    Le nouveau code qui plante :

    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
    set serveroutput on
     
    /* Declaration d'une variable car v_n_nb sera passee en parametre de type IN OUT a la procedure */
    DECLARE
    v_n_nb NUMBER;
     
    /* Pas de CREATE OR REPLACE sinon erreurs de compilation */
    PROCEDURE proc_nb_job (v_s_job IN VARCHAR2, v_n_nb IN OUT NUMBER) IS
    BEGIN
            SELECT count(*) INTO v_n_nb FROM emp WHERE job=v_s_job;
     
            /* Recherche des noms des personnes */
            CASE v_n_nb
            WHEN 0 then
                    DBMS_OUTPUT.PUT_LINE('Aucune personne n''occupe le poste de ' || v_s_job || '.');
            WHEN 1 then
                    DBMS_OUTPUT.PUT_LINE('Une seule personne occupe le poste de ' || v_s_job || '.');
            ELSE
                    DBMS_OUTPUT.PUT_LINE(v_n_nb || ' personnes occupent le poste de ' || v_s_job || '.');
            END CASE;
    END;
    /
    J'ai l'erreur suivante et je n'y comprends rien de rien; je suis sur que c'est trois fois rien mais je m'y casse les dents .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> @toto
    END;
       *
    ERROR at line 18:
    ORA-06550: line 18, column 4:
    PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:
    begin function pragma procedure
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Comme ça est-ce que ça passe?
    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
     
    create or replace PROCEDURE proc_nb_job (v_s_job IN VARCHAR2, v_n_nb IN OUT NUMBER) IS
    BEGIN
            SELECT count(*) INTO v_n_nb FROM emp WHERE job=v_s_job;
     
            /* Recherche des noms des personnes */
            CASE v_n_nb
            WHEN 0 then
                    DBMS_OUTPUT.PUT_LINE('Aucune personne n''occupe le poste de ' || v_s_job || '.');
            WHEN 1 then
                    DBMS_OUTPUT.PUT_LINE('Une seule personne occupe le poste de ' || v_s_job || '.');
            ELSE
                    DBMS_OUTPUT.PUT_LINE(v_n_nb || ' personnes occupent le poste de ' || v_s_job || '.');
            END CASE;
    END;
    /
     
     
    /* On cherche le nombre de personnes exerçant le metier passe en parametre. */
    /* Declaration d'une variable car v_n_nb sera passee en parametre de type IN OUT a la procedure */
    DECLARE
    v_n_nb NUMBER; 
    BEGIN
    /* Initialisation de la variable et appel de la procedure avec saisie par l'utilisateur du metier */
    v_n_nb := 0;
    proc_nb_job('&METIER', v_n_nb);
    end;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2014

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 992
    Points : 2 498
    Points
    2 498
    Par défaut
    Oui, ça passe
    Un gros merci à toi Linkin (il manquait juste / dans le deuxième code après END; mais là, je pinaille :-) )

    Bon, maintenant je vais voir où étais le problème
    -- Ca y est, je pense avoir compris le problème : dans mon code je crée une procédure locale et non pas une procédure stockée (je n'avais pas mis CREATE or REPLACE) et donc si je ne l'appelle pas dans mon fichier et qu'il n'y a aucun autre code, mon fichier n'a pas lieu d'être. Ca me semble un peu bizarre comme problème car si j'ai raison, Oracle détermine la logique ou non d'un fichier : création d'une procédure locale sans appel de celle-ci --> erreur!
    Bon, peut-être que je me trompe mais au moins mon code fonctionne maintenant :-)
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

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

Discussions similaires

  1. Erreur PLS-00103: Encountered the symbol "AND"
    Par kouette dans le forum PL/SQL
    Réponses: 10
    Dernier message: 30/05/2011, 20h53
  2. PB Procédure SQL - Encountered the Symbol ""
    Par laetus dans le forum C++Builder
    Réponses: 6
    Dernier message: 07/01/2008, 20h45
  3. Error PLS-00103 dans une procédure stockée
    Par LeNovice dans le forum Oracle
    Réponses: 4
    Dernier message: 19/03/2007, 17h11
  4. Réponses: 4
    Dernier message: 23/05/2006, 18h04
  5. Problèmes création de procédures et de triggers
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 06/11/2003, 11h42

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