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