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.
Si je l'execute sous SQL*Plus :
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; /
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 :
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
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; /
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
Partager