Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
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 10/05/2006, 09h13   #1
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Par défaut Affichage d'une procedure stockée

Bonjour,

Etant plus que novice en DB2, je dois, dans le cadre d'un stage, "devellopper" une procedure stockée pour recupperer un certain nombres d'informations afin de les analyser.

La question que je me pose, est comment puis je afficher le resultat de mes SELECT ? Y a t-il un mecanisme au sein de la procedure, ou doit on passer obligatoirement par une "application" client.

Merci
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 09h47   #2
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Voci un exemple:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
CREATE PROCEDURE monschema.PROCEDURE1 (  )
    DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL Stored Procedure
------------------------------------------------------------------------
P1: BEGIN
    -- Declare cursor
    DECLARE cursor1 CURSOR WITH RETURN FOR
        SELECT * FROM monschema.matable;
    -- Cursor left open for client application
    OPEN cursor1;
END P1
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 10h09   #3
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Merci pour ce morceau de code.

D'apres ce que j'ai compris, cette procedure permet a une application client de recupperer mon cursor. Mais au sein de ma procedure, est ce que je ne pourrais pas faire un truc du genre: print(ma_variable) ? il est vrai que ce genre de methodes doit être réservée plus à la mise au point des procédures, mais cela pourrait m'arranger tout de meme.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 10h51   #4
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab
Si tu fais un call de la procédure dans le command center par exemple, le résultat complet sera affiché. Je pense que c'est ce que tu cherches non ?
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/05/2006, 11h04   #5
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Ok, j'ai essayé et cela marche parfaitement. En fait, ce qui m'intesserait le plus, et de pouvoir afficher des variables. Je vais reflechir à mon pb, et je re posterais avec un exemple plus concret.

Merci pour ton aide.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 10h43   #6
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Bonjour,

J'ai un peu avancé dans le "developpement" de ma procedure et je me confronte a un nouveau probleme: Comment afficher le contenu d'une table temporaire. Je post mon code:

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
 
CREATE PROCEDURE MVXCTESTS.ESSAI1
LANGUAGE SQL
MODIFIES SQL DATA
NOT FENCED
BEGIN
  DECLARE TABLE_EXISTS CONDITION FOR '42710';
  DECLARE CONTINUE HANDLER FOR TABLE_EXISTS
    DELETE FROM SESSION.RETURN_TBL;
  DECLARE GLOBAL TEMPORARY TABLE SESSION.RETURN_TBL (
  GAMME CHAR(25) NOT NULL,
  NB_OP INTEGER NOT NULL,
  NB_OP_1 INTEGER NOT NULL);
 
  FOR_LOOP: FOR EACH_ROW AS C1 CURSOR FOR
    SELECT OBITNO, PMMTNO 
          FROM MVXCTESTS.OOLINE, MVXCTESTS.MPDMAT 
            WHERE OBCONO = 101 AND OBFACI = '011' 
              AND OBDWDZ BETWEEN 20060101 AND 20061231 
                AND OBCONO = PMCONO AND OBITNO = PMPRNO 
                  AND PMSTRT = 'SER' AND OBCUNO = '0035' 
                    GROUP BY OBITNO, PMMTNO ORDER BY OBITNO DO
 
    INSERT INTO SESSION.RETURN_TBL VALUES(EACH_ROW.OBITNO, 10, 10);
  END FOR;
END;
Je voudrais bien afficher le contenu de la table SESSION.RETURN_TBL, mais lors de la declaration d'un nouveau cursor, j'obtiens l'erreur SQL0104, et comme je n'ai aucune experience dans le domaine des procedures stockées sous DB2, j'ai vraiment beaucoup de mal.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 14h22   #7
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
J'ai résolu mon problème. Merci pour votre aide tout de même.
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 15h06   #8
jab
Rédacteur
 
Avatar de jab
 
Homme Jean-Alain Baeyens
SharePoint developpeur
Inscription : février 2004
Messages : 1 172
Détails du profil
Informations personnelles :
Nom : Homme Jean-Alain Baeyens
Âge : 48
Localisation : Belgique

Informations professionnelles :
Activité : SharePoint developpeur
Secteur : Service public

Informations forums :
Inscription : février 2004
Messages : 1 172
Points : 3 131
Points : 3 131
Envoyer un message via ICQ à jab Envoyer un message via MSN à jab Envoyer un message via Skype™ à jab


Peux-tu placer la solution à la suite de ce poste pour ceux qui aurraient le même soucis. Faut pas faire long.

Merci d'avance.

PS: n'oublie pas
jab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/05/2006, 15h24   #9
Membre du Club
 
Inscription : avril 2004
Messages : 85
Détails du profil
Informations personnelles :
Âge : 28

Informations forums :
Inscription : avril 2004
Messages : 85
Points : 62
Points : 62
Solution, pas forcement très belle, mais qui marche...

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
 
CREATE PROCEDURE MVXCTESTS.ESSAI1
RESULT SETS 1
LANGUAGE SQL
BEGIN
  /*Variables*/
  DECLARE COUNTG INTEGER;
  DECLARE COUNTG_1 INTEGER;
  /*Declaration du cursor sur la table temp: SESSION.RETURN_TBL*/
  DECLARE cursor1 CURSOR WITH RETURN FOR
        SELECT * FROM SESSION.RETURN_TBL;
 
  /*Declaration de la table tmp: SESSION.RETURN_TBL*/
  DECLARE GLOBAL TEMPORARY TABLE SESSION.RETURN_TBL (
  GAMME CHAR(25) NOT NULL,
  GAMME_1 CHAR(25) NOT NULL,
  NB_OP INTEGER NOT NULL,
  NB_OP_1 INTEGER NOT NULL)WITH REPLACE;
  SET COUNTG_1 = 0;
  /**/
  FOR_LOOP: FOR EACH_ROW AS C1 CURSOR FOR
    SELECT OBITNO, PMMTNO 
          FROM MVXCTESTS.OOLINE, MVXCTESTS.MPDMAT 
            WHERE OBCONO = 101 AND OBFACI = '011' 
              AND OBDWDZ BETWEEN 20060101 AND 20061231 
                AND OBCONO = PMCONO AND OBITNO = PMPRNO 
                  AND PMSTRT = 'SER' AND OBCUNO = '0035' 
                    GROUP BY OBITNO, PMMTNO ORDER BY OBITNO
    DO
 
    /**/
    FOR_LOOP_1: FOR EACH_ROW_1 AS C2 CURSOR FOR
      SELECT COUNT(POPRNO) AS B FROM MVXCTESTS.MPDOPE 
        WHERE POPRNO = EACH_ROW.OBITNO AND POSTRT = 'SER'
      DO
      SET COUNTG = EACH_ROW_1.B;
    END FOR;
 
    /**/
    FOR_LOOP_2: FOR EACH_ROW_2 AS C3 CURSOR FOR
      SELECT COUNT(POPRNO) AS C FROM MVXCTESTS.MPDOPE 
        WHERE POPRNO = EACH_ROW.PMMTNO AND POSTRT = 'SER'
      DO
      SET COUNTG_1 = COUNTG_1 + EACH_ROW_2.C;
    END FOR;
 
    /**/
    INSERT INTO SESSION.RETURN_TBL VALUES(EACH_ROW.OBITNO, EACH_ROW.PMMTNO, COUNTG, COUNTG_1);
 
  END FOR;
 
    /**/
    OPEN cursor1;
END;
aicfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h09.


 
 
 
 
Partenaires

Hébergement Web