Bonjour,

Voici un module qui renvoie dans un tableau, un maximum de 10 résultats de 100 de longueur chaque.

Il permet d'exécuter des requêtes SQL depuis un programme du type CBLLE.

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
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
       IDENTIFICATION DIVISION.
       PROGRAM-ID.                      FUSQLB5002.
       AUTHOR.                               PORTEKOI.

       ENVIRONMENT DIVISION.
      *----------------------------------------------------------------
       CONFIGURATION SECTION.
      *----------------------------------------------------------------
       SOURCE-COMPUTER.                 IBM-AS400.
       OBJECT-COMPUTER.                 IBM-AS400.
       SPECIAL-NAMES.
                                        C01 IS CANAL-1
                                        REQUESTOR IS UD
                                        LOCAL-DATA IS MD-LOCAL-DATA
                                        CURRENCY SIGN IS "F"
                                        DECIMAL-POINT IS COMMA.
      *----------------------------------------------------------------
       INPUT-OUTPUT SECTION.
      *----------------------------------------------------------------
       FILE-CONTROL.
      *****************************************************************
       DATA DIVISION.
      *****************************************************************
      *----------------------------------------------------------------
       FILE SECTION.
      *----------------------------------------------------------------
       WORKING-STORAGE SECTION.

           EXEC SQL
           INCLUDE SQLCA
           END-EXEC.

       01 MyString          PIC X(1500).
       01 LstChamps       PIC X(80).
       01 Twhere1          PIC X(10) VALUES "WHERE".
       01 Twhere2          PIC X(210).

       01 WW-chp1     PIC X(100).
       01 WW-chp2     PIC X(100).
       01 WW-chp3     PIC X(100).
       01 WW-chp4     PIC X(100).
       01 WW-chp5     PIC X(100).
       01 WW-chp6     PIC X(100).
       01 WW-chp7     PIC X(100).
       01 WW-chp8     PIC X(100).
       01 WW-chp9     PIC X(100).
       01 WW-chp10    PIC X(100).


      *************************************************************
      *             LINKAGE         SECTION                       *
      *************************************************************

       LINKAGE SECTION.
      * Nom de la table?
       01 LK-NAME PIC X(10).
      * Les champs désirés?
       01 LK-LSTCHP PIC X(80).
      * Clause where?
       01 LK-WHERE PIC X(200).
      * Les résultats?
       01 LK-LSTRESULT.
          02 LK-TAB OCCURS 10.
              03 LK-chp     PIC X(100).
      * Code erreur?
       01 LK-CODERETOUR PIC X(02).
      *****************************************************************
       PROCEDURE DIVISION USING    LK-NAME
                                   LK-LSTCHP
                                   LK-WHERE
                                   LK-LSTRESULT
                                   LK-CODERETOUR.
      *****************************************************************




       DEB-PROG.
      *
      * Transformations des données
      *
      * Initialisation du code retour
            MOVE "00" TO LK-CODERETOUR.
            MOVE " " To Twhere2.
            IF LK-WHERE NOT = " " THEN
                String Twhere1 Delimited By Size,
                       LK-WHERE Delimited By Size
                              Into Twhere2
            END-IF.

      * En cas d'erreur...
            EXEC SQL
              WHENEVER SQLERROR GO TO TRAIT-ERREUR
            END-EXEC.

           String  'Select '  Delimited By Size,
           LK-LSTCHP,

                    ' From '  Delimited By Size,
                         LK-NAME   Delimited By Size,
                    ' ' Delimited By Size,
                   Twhere2 Delimited By Size,
                    ' ' Delimited By Size,
                   'FETCH FIRST 1 ROWS ONLY' Delimited By Size
                                          Into MyString.


               Exec sql Prepare SqlStm From :MyString End-exec.

               Exec sql Declare c1 cursor For SqlStm End-exec.

               Exec sql Open c1 End-exec.

               Exec sql Fetch c1 Into
                           :WW-chp1,
                           :WW-chp2,
                           :WW-chp3,
                           :WW-chp4,
                           :WW-chp5,
                           :WW-chp6,
                           :WW-chp7,
                           :WW-chp8,
                           :WW-chp9,
                           :WW-chp10
               End-exec.

               Exec sql Close c1 End-exec.

               MOVE WW-chp1 TO LK-chp(1).
               MOVE WW-chp2 TO LK-chp(2).
               MOVE WW-chp3 TO LK-chp(3).
               MOVE WW-chp4 TO LK-chp(4).
               MOVE WW-chp5 TO LK-chp(5).
               MOVE WW-chp6 TO LK-chp(6).
               MOVE WW-chp7 TO LK-chp(7).
               MOVE WW-chp8 TO LK-chp(8).
               MOVE WW-chp9 TO LK-chp(9).
               MOVE WW-chp10 TO LK-chp(10).


       FIN-PROGRAMME.
           EXIT.
           GOBACK.



      *****************************************************************
       TRAIT-ERREUR.
           MOVE "23"  TO  LK-CODERETOUR.
           GO TO FIN-PROGRAMME.
       FIN-TRAIT-ERREUR.
           EXIT.
Bon dev à tous


Portekoi