Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 25/01/2012, 23h00   #1
Invité de passage
 
Inscription : mai 2010
Messages : 9
Détails du profil
Informations forums :
Inscription : mai 2010
Messages : 9
Points : 0
Points : 0
Par défaut Aucun affichage de mes procédures

Bonjour,


Je suis débutant en PL/SQL, et j'essaye de faire un package permettant l'affichage d’éléments d'une base de données d'une bibliothèque, mais je n'arrive pas a afficher le résultats de mes procédures qui ont bien compilé.

J'ai bien entré le "set serveroutput on", mais rien à faire, et je ne sais pas si ça vient de mon code ou non.

La première procédure utilise du SQL dynamique (c'est une contrainte qu'on m'impose), j'ai essayé de suivre les structures que j'ai trouvé sur le net. La seconde utilise un curseur, mais ne retourne rien non plus.

Je suppose que j'ai fais des erreurs impardonnables, mais comme je n'ai aucune expérience dans ce langage, j'aurais besoin de votre aide !

Merci d'avance.

Code :
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
33
34
35
36
37
38
39
40
41
42
CREATE OR REPLACE
PACKAGE AFFICHAGE AS 
 
TYPE livretuple IS RECORD( 
  nom livres.nom_livre%TYPE); 
 
CURSOR les_livres RETURN livretuple; 
 
procedure nb_a_rendre (adherent NUMBER );
 
procedure lst_livres_dispo;
 
END AFFICHAGE;
 
 
 
 
CREATE OR REPLACE
PACKAGE BODY AFFICHAGE AS
 
 CURSOR les_livres RETURN livretuple IS SELECT nom_livre FROM livres WHERE dispo = 1;
 
  procedure nb_a_rendre (adherent NUMBER) IS
    query_str VARCHAR2(1000);
    num NUMBER;
BEGIN
    query_str := 'SELECT COUNT(id_emprunt) FROM emprunt WHERE id_adherent = '|| TO_CHAR(adherent) ||' AND date_retour is null';
    EXECUTE IMMEDIATE query_str
        INTO num;
dbms_output.put_line ('Nombre de livre à rendre :' || num);
END; 
 
 
  PROCEDURE lst_livres_dispo IS
  s livretuple; 
BEGIN 
  FOR s IN les_livres LOOP 
    DBMS_OUTPUT.PUT_LINE(s.nom);
  END LOOP; 
END;
 
END AFFICHAGE;
Bluuuh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 08h56   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 316
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 316
Points : 5 822
Points : 5 822
Pour vous aider vous devez donner les détails de ce que vous faites. De plus ajouter un petit jeu d'essaie complet (table et quelques données) permet de mieux vous aider.
Ci joint votre code légèrement modifié pour attaquer les tables du schéma hr.

Code :
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> CREATE OR REPLACE
  2  PACKAGE AFFICHAGE AS
  3  
  4  TYPE livretuple IS RECORD(
  5    nom employees.first_name%TYPE);
  6  
  7  CURSOR les_livres RETURN livretuple;
  8  
  9  procedure nb_a_rendre (adherent NUMBER );
 10  
 11  procedure lst_livres_dispo;
 12  
 13  END AFFICHAGE;
 14  /
 
Package created
 
SQL> 
SQL> CREATE OR REPLACE
  2  PACKAGE BODY AFFICHAGE AS
  3  
  4   CURSOR les_livres RETURN livretuple IS SELECT first_name FROM employees WHERE employee_id = 100;
  5  
  6    procedure nb_a_rendre (adherent NUMBER) IS
  7      query_str VARCHAR2(1000);
  8      num NUMBER;
  9  BEGIN
 10      query_str := 'SELECT COUNT(employee_id) FROM employees WHERE department_id = '|| TO_CHAR(adherent) ||' AND manager_id is null';
 11      EXECUTE IMMEDIATE query_str
 12          INTO num;
 13     dbms_output.put_line ('Nombre de livre à rendre :' || num);
 14  END;
 15  
 16  
 17    PROCEDURE lst_livres_dispo IS
 18    s livretuple;
 19  BEGIN
 20    FOR s IN les_livres LOOP
 21      DBMS_OUTPUT.PUT_LINE(s.nom);
 22    END LOOP;
 23  END;
 24  
 25  END AFFICHAGE;
 26  /
 
Package body created
 
SQL> SET serveroutput ON
SQL> exec affichage.lst_livres_dispo
 
Steven
 
PL/SQL procedure successfully completed
 
SQL> exec affichage.nb_a_rendre(10)
 
Nombre de livre à rendre :0
 
PL/SQL procedure successfully completed
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 09h20   #3
Membre Expert
 
Avatar de pacmann
 
Homme Pacman Pacman
Business analyst
Inscription : juin 2004
Messages : 1 417
Détails du profil
Informations personnelles :
Nom : Homme Pacman Pacman
Âge : 31
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Business analyst
Secteur : Finance

Informations forums :
Inscription : juin 2004
Messages : 1 417
Points : 2 309
Points : 2 309
Citation:
Envoyé par Bluuuh Voir le message
La première procédure utilise du SQL dynamique (c'est une contrainte qu'on m'impose)
...
Code :
1
2
3
4
5
6
 
    query_str := 'SELECT COUNT(id_emprunt) FROM emprunt WHERE id_adherent = '|| TO_CHAR(adherent) ||' AND date_retour is null';
    EXECUTE IMMEDIATE query_str
        INTO num;
dbms_output.put_line ('Nombre de livre à rendre :' || num);
END;
Oh mon Dieu, mais qui est-ce qui t'oblige à faire une telle horreur ?
Moi j'aurais démissionné
__________________

(c'est ma photo)
Paku, Paku !
Pour les jeunes incultes : non, je ne suis pas un pokémon...

Le pacblog : http://pacmann.over-blog.com/
pacmann est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 26/01/2012, 11h28   #4
Invité régulier
 
Homme F.C
Développeur Décisionnel
Inscription : janvier 2012
Messages : 4
Détails du profil
Informations personnelles :
Nom : Homme F.C

Informations professionnelles :
Activité : Développeur Décisionnel

Informations forums :
Inscription : janvier 2012
Messages : 4
Points : 5
Points : 5
Bonjour,

D’où est appelé ce code ? Toujours SQL*Plus ou un client Oracle tiers ?
Zyniel est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h53.


 
 
 
 
Partenaires

Hébergement Web