DFU, Query, SQL

52. SQL組込みプログラミングの例

SQL組込みプログラミングを見たことがないという人のために
基本となるSQL組込みプログラミングの例を紹介する。
これはSQL組込みプログラミングとして注意点も含めて
いつでも参照して頂きたい。
ここでは担当者マスター(TANTOM) と部課マスター(BUKAM)を
結合して一覧表にして印刷出力する例を紹介する。
サンプル・ライブラリー: QTRFIL を導入しているユーザーであれば
担当者マスター(TANTOM) と部課マスター(BUKAM)はそのまま利用することが
できる。
またサンプル・ライブラリーは
ここからダウンロードすることができる。

担当者マスター(TANTOM)のDDSソースは

0001.00      A**********************************************                        
0002.00      A*    TANTOM  :   担当者マスターファイル      *                        
0003.00      A**********************************************                        
0004.00      A                                      UNIQUE                          
0005.00      A          R @TANTOM                                                   
0006.00      A*                                                                     
0007.00      A            TACODE         4A         COLHDG(' 担当者 コード')          
0008.00      A            TTNAM          8O         COLHDG(' 担当者略名 ')          
0009.00      A            TTNAMJ        22O         COLHDG(' 担当者名 ')            
0010.00      A                                      TEXT(' 給与 マスター.DJAPKN より ') 
0011.00      A            TBCODE         2A         COLHDG(' 部課 コード')            
0012.00      A                                      TEXT('99= 全社 ')               
0013.00      A            TASHCD         5A         COLHDG(' 社員 コード')            
0014.00      A            TAKBN          1A         COLHDG(' 作業区分 ')            
0015.00      A                                      TEXT(' 空白 = 直接 ;1= 間接 ')  
0016.00      A            TADELT         1A         COLHDG(' 削除区分 ')            
0017.00      A            TADLDT         6S 0       COLHDG(' 削除日 ')              
0018.00      A            TAINCD         5A         COLHDG(' 登録者 ')              
0019.00      A            TAINDT         6S 0       COLHDG(' 登録日 ')              
0020.00      A*                                                                     
0021.00      A          K TACODE                                                    

担当者マスター(TANTOM)のデータは

        担当者 コード   担当者略名    担当者名                部課 コード   社員 コード   作業区分  
000001     1201         池田宏      池田 宏司                 12        00524         1      
000002     1202         内海        内海 政行                 12        00258         1      
000003     1203         安高        安高 徳秀                 12        00547         1      
000004     1205         宮島        宮島 拓也                 12        00481         1      
000005     1206         市川        市川 勝喜                 12        00439         1      
000006     1207         綿井        綿井 千鶴                 12        00473         1      
000007     1208         小谷        小谷 博美                 12        00530         1      
000008     1209         宗政        宗政  剛                 12        00574         1      
000009     1210         天井        天井 誠一                 12        00254         1      
000010     1211         永井        永井 一雄                 12        00140         1      
 :
 :    

部課マスターのDDSソースは

0001.00      A**********************************************                
0002.00      A*   BUKAM   :  部課マスターファイル          *                
0003.00      A**********************************************                
0004.00      A                                      UNIQUE                  
0005.00      A          R @BUKAM                                            
0006.00      A*                                                             
0007.00      A            BKCODE         2A         COLHDG(' 部課コード ')  
0008.00      A            BKNAME        10O         COLHDG(' 部課名 ')      
0009.00      A                                      TEXT(' 漢字 ')          
0010.00      A            BKHOUR         3S 0       COLHDG(' 当月労働時間 ')
0011.00      A            BKRATE         5S 0       COLHDG(' 時間当賃金 ')  
0012.00      A*                                                             
0013.00      A          K BKCODE                                            

部課マスターのデータは

        部課 コード   部課名      当月労働時間計    時間当賃金  
000001     11       役員                0                0    
000002     12       総務部              0                0    
000003     21       国内営業            0                0    
000004     22       貿易部              0                0    
000005     23       大型映像            0                0    
000006     30       技術部              0                0    
000007     50       原価係              0                0    
000008     51       調達課              0                0    
000009     53       サービス            0                0    
000010     54       精密研磨            0                0    
000011     56       組立調整            0                0    
000012     57       ソフト部            0                0    
000013     58       EG部              0                0    
000014     59       大型映像            0                0    
000015     91       製造                0                0    
000016     92       管理販売            0                0    
000017     99       その他              0                0    
 :
 :

SQLPRINT: SQL組込みプログラミングのRPGソース

ソース仕様タイプ : SQLRPGLE ( SEU でこのタイプを指定する )

ソースはこちらで

0001.00 H DEBUG DFTNAME(SQLPRINT) DATEDIT(*YMD/)                                              
0002.00 F********** SQL 担当者マスター一覧表 *****************************                    
0003.00 FQPRINT    O    F  132        PRINTER OFLIND(*INOF)                                   
0004.00 F                                     FORMLEN(66)                                     
0005.00 F                                     FORMOFL(62)                                     
0006.00 F*****************************************************************                    
0007.00  *[ COMPILE ]                                                                         
0008.00  * CRTSQLRPGI QTEMP/SQLPRINT SRCFILE(QTRSRC/QRPGLESRC) COMMIT(*NONE)                  
0009.00  *                     OBJTYPE(*MODULE) OUTPUT(*PRINT)                                
0010.00  * CRTPGM     QTROBJ/SQLPRINT MODULE(QTEMP/SQLPRINT) ACTGRP(*NEW) AUT(*ALL)           
0011.00  *                                                                                    
0012.00  *[ 実行 ]                                                                            
0013.00  *  CALL QTROBJ/SQLPRINT                                                              
0014.00                                                                                       
0015.00 D HDR             S             32    DIM(1) CTDATA PERRCD(1)               見出し    
0016.00 D LIN             S              1    DIM(132)                                        
0017.00 D KENSU           S              4S 0                                                 
0018.00 D TBCODE_B        S              2A                                                   
0019.00 D*( データ・ベース外部データ構造 )                                                    
0020.00 D FMT001        E DS                  EXTNAME(TANTOM)                                 
0021.00 D FMT002        E DS                  EXTNAME(BUKAM)                                  
0022.00 D RCDDTA          DS                  OCCURS(9999)                                    
0023.00 D  VAR1                   1   1024                                                    
0024.00 D N               S              4B 0                               
0025.00 C******************************************************             
0026.00 C*    SQL 文のカーソルの前準備                                      
0027.00 C******************************************************             
0028.00 C* SELECT 文によってカーソル C1 を用意                              
0029.00 C/EXEC SQL DECLARE C1 CURSOR FOR                                    
0030.00 C+  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME                    
0031.00 C+         FROM QTRFIL/TANTOM, QTRFIL/BUKAM                         
0032.00 C+         WHERE TBCODE = BKCODE                                    
0033.00 C+         ORDER BY TBCODE, TACODE                                  
0034.00 C/END-EXEC                                                          
0035.00 C*  カーソルをオープン                                              
0036.00 C/EXEC SQL OPEN C1                                                  
0037.00 C/END-EXEC                                                          
0038.00 C******************************************************             
0039.00 C*            明  細  演  算                                  
0040.00 C******************************************************             
0041.00 C/EXEC SQL WHENEVER NOT FOUND GOTO EOF                              
0042.00 C/END-EXEC                                                          
0043.00 C     1             DO        *HIVAL        N                       
0044.00 C     N             OCCUR     RCDDTA                                
0045.00 C/EXEC SQL                                                          
0046.00 C+   FETCH C1 INTO :TACODE, :TTNAMJ, :TBCODE, :TTNAM, :BKNAME       
0047.00 C/END-EXEC                                                          
0048.00 C*( 明細印刷 )                                                        
0049.00 C*    TACODE        CAT(P)    TTNAMJ:0      RCDDTA                    
0050.00 C                   MOVEL(P)  TACODE        RCDDTA                    
0051.00 C                   CAT       TTNAMJ:0      RCDDTA                    
0052.00 C/EXEC SQL SET RESULT SETS ARRAY :RCDDTA FOR :N ROWS                  
0053.00 C/END-EXEC                                                            
0054.00 C*------------------------------------------------------------------  
0055.00 C                   SETON                                        42   
0056.00 C                   EXSR      OUTPUT                                  
0057.00 C*------------------------------------------------------------------  
0058.00 C                   ADD       1             KENSU                     
0059.00 C                   ENDDO                                             
0060.00 C     EOF           TAG                                               
0061.00 C*  カーソルをクローズ                                                
0062.00 C/EXEC SQL CLOSE C1                                                   
0063.00 C/END-EXEC                                                            
0064.00 C     END           TAG                                               
0065.00 C*------------------------------------------------------------------  
0066.00 C                   SETON                                        49   
0067.00 C                   EXSR      OUTPUT                                  
0068.00 C*------------------------------------------------------------------  
0069.00 C                   SETON                                        LR   
0070.00 C******************************************************               
0071.00 C     *INZSR        BEGSR                                             
0072.00 C******************************************************                  
0073.00 C*  初期のみの実行                                                       
0074.00 C                   CLEAR                   FMT001                       
0075.00 C                   MOVEA     *ALL'-'       LIN                          
0076.00 C     INZEND        ENDSR                                                
0077.00 C******************************************************                  
0078.00 C     OUTPUT        BEGSR                                                
0079.00 C******************************************************                  
0080.00 C     TBCODE        IFNE      TBCODE_B                                   
0081.00 C                   SETOFF                                       40      
0082.00 C                   ENDIF                                                
0083.00 C  N40              SETON                                        4041    
0084.00 C                   EXCEPT                                               
0085.00 C   OF              SETOFF                                       40OF    
0086.00 C                   SETOFF                                       414243  
0087.00 C                   SETOFF                                       444546  
0088.00 C                   SETOFF                                       474849  
0089.00 C                   MOVE      TBCODE        TBCODE_B                     
0090.00 C                   ENDSR                                                
0091.00 OQPRINT    E    41                     2 06                              
0092.00 O                       UDATE         Y      8                           
0093.00 O                                           14 ' 作成 '                  
0094.00 O                       HDR(1)              82                           
0095.00 O                                          128 'PAGE.'                   
0096.00 O                       PAGE          Z    131                         
0097.00 O          E    41                     1                               
0098.00 O                                           12 ' 部課コード '          
0099.00 O                       TBCODE              18                         
0100.00 O                                           24 ' 部課名 '              
0101.00 O                       BKNAME              36                         
0102.00 O          E    41                     1                               
0103.00 O                       LIN                132                         
0104.00 O          E    41                     1                               
0105.00 O                                           14 ' 担当者コード '        
0106.00 O                                           24 ' 担当者名 '            
0107.00 O                                           44 ' 略名 '                
0108.00 O          E    41                     1                               
0109.00 O                       LIN                132                         
0110.00 O          E    42                     2                               
0111.00 O                       TACODE               5                         
0112.00 O                       TTNAMJ              36                         
0113.00 O                       TTNAM               46                         
0114.00 O          E    49                     1                               
0115.00 O                                           40 ' 処理件数 '            
0116.00 O                                           57 '. . . . . . . . .'     
0117.00 O                       KENSU         2     65                         
0118.00 DR                                                                     
0118.00 **  HDR      
0119.00  担当者一覧表


  

[実行結果]
CALL QTROBJ/SQLPRINT

                                                     スプール・ファイルの表示                                                       
  ファイル . . . :   QPRINT                                                                            ページ/行     1/6           
  制御 . . . . . .                                                                                     桁             1 - 127       
  検索 . . . . . .                                                                                                                  
  *...+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8....+....9....+....0....+....1....+....2....+..   
  20/02/27 作成                                      担当者一覧表                                                            PAGE   
   部課コード      部課名    総務部                                                                                                 
  -------------------------------------------------------------------------------------------------------------------------------   
   担当者コード  担当者名                略名                                                                                       
  -------------------------------------------------------------------------------------------------------------------------------   
   1201          池田 宏司              池田宏                                                                                     
   1202          内海 政行              内海                                                                                       
   1203          安高 徳秀              安高                                                                                       
   1205          宮島 拓也              宮島                                                                                       
   1206          市川 勝喜              市川                                                                                       
   1207          綿井 千鶴              綿井                                                                                       
   1208          小谷 博美              小谷                                                                                       
   1209          宗政  剛              宗政                                                                                       
   1210          天井 誠一              天井                                                                                       
   1211          永井 一雄              永井                                                                                       
   1212          沼能 喜之助            沼能                                                                                       
   1213          増山 幸恵              増山                                                                                       
  20/02/27 作成                                      担当者一覧表                                                            PAGE   
   部課コード      部課名    国内営業                                                                                               
                                                                                                                           続く ... 
 F3= 終了    F12= 取消し    F19= 左    F20= 右    F24= キーの続き                                                                   
                                                                                                                                    

[解説]

ファイル仕様書にはデータ・ベースの記述がないことに注意。

0019.00 D*( データ・ベース外部データ構造 )                                                    
0020.00 D FMT001        E DS                  EXTNAME(TANTOM)                                 
0021.00 D FMT002        E DS                  EXTNAME(BUKAM) 

 

としているのはフィールド名を利用する目的である。

0022.00 D RCDDTA          DS                  OCCURS(9999)                                    
0023.00 D  VAR1                   1   1024 

 

OCCURSによってデータ・ベースを保管するための構造体を定義している。
OCCURSは RPGではあまり使用されないが SQLではレコードを取り出して
記憶するために必要である。
OCCURS の詳細な説明はこちらで

0028.00 C* SELECT 文によってカーソル C1 を用意                              
0029.00 C/EXEC SQL DECLARE C1 CURSOR FOR                                    
0030.00 C+  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME                    
0031.00 C+         FROM QTRFIL/TANTOM, QTRFIL/BUKAM                         
0032.00 C+         WHERE TBCODE = BKCODE                                    
0033.00 C+         ORDER BY TBCODE, TACODE                                  
0034.00 C/END-EXEC

 

のように C+ の行で SQL文を記述しておくとコンパイル(CRTSQLRPGI)すると
この部分がAPIを呼び出すRPGソースに展開される。
展開の詳細については後でもう一度説明する。

0029.00 C/EXEC SQL DECLARE C1 CURSOR FOR 

 

でカーソル C1 を次のように定義している。

0030.00 C+  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME                    
0031.00 C+         FROM QTRFIL/TANTOM, QTRFIL/BUKAM                         
0032.00 C+         WHERE TBCODE = BKCODE                                    
0033.00 C+         ORDER BY TBCODE, TACODE

 

SQLSELECT文で TACODE, TTNAMJ, … を担当者マスター(QTRFIL/TANTOM)と
部課マスター(QTRFIL/BUKAM)から部課コードが一致する( WHERE TBCODE = BKCODE )
ものだけを選択して部課コード(TBCODE)、担当者コード(TACODE)の順に(ORDER BY)
並べる。
なお SELECT での TACODE, TTNAMJ, …並びと後のFETCHのフィルードの記述は
一致していなければならない。

次に

0035.00 C*  カーソルをオープン                                              
0036.00 C/EXEC SQL OPEN C1                                                  
0037.00 C/END-EXEC 

 

でカーソルをオープンする。

0041.00 C/EXEC SQL WHENEVER NOT FOUND GOTO EOF                              
0042.00 C/END-EXEC

 

EOF(レコードの読取りの終わり)に達したら EOF にジャンプすることを
指示しておく。

0043.00 C     1             DO        *HIVAL        N                       
0044.00 C     N             OCCUR     RCDDTA                                
0045.00 C/EXEC SQL                                                          
0046.00 C+   FETCH C1 INTO :TACODE, :TTNAMJ, :TBCODE, :TTNAM, :BKNAME       
0047.00 C/END-EXEC
  :
    :
0052.00 C/EXEC SQL SET RESULT SETS ARRAY :RCDDTA FOR :N ROWS                  
0053.00 C/END-EXEC
    :
0059.00 C                   ENDDO                                             
0060.00 C     EOF           TAG

SQLのFETCH文はカーソルのデータを一行ずつ取り出すRPGREAD命令のようなものである。
FETCH INTO で :TACODE, :TTNAMJ, … と SELECTで選択したのと同じフィールドの
順序で :TACODE, :TTNAMJ, …に書き込んでいく。
:TACODEのように :がフィールドの頭についているのはこれがデータ・ベースの
フィールドであることを表している。
つまり SQLのメモリ空間からデータ・ベースのフィールド値に値を入れている。

最後に

0061.00      C*  カーソルをクローズ  
0062.00      C/EXEC SQL CLOSE C1     
0063.00      C/END-EXEC              

 

でカーソルを閉じて終了する。

[コンパイル]

コンパイルは最初に

CRTSQLRPGI QTEMP/SQLPRINT SRCFILE(QTRSRC/QRPGLESRC) COMMIT(*NONE)
OBJTYPE(*MODULE) OUTPUT(*PRINT)

でモジュール(*MODULE)を作成しているがいきなり *PGM を作成するように
指示しても構わない。
ただし

COMMIT(*NONE)

……… ジャーナルを使ってコミット&ロールバツクをするのであれば
COMMIT(*CHG)を指定するが多くのIBM iユーザーは
ジャーナルを使用しないケースが多いのでその場合は
COMMIT(*NONE)を指定する。

OUTPUT(*PRINT)

……… CRTSQLRPGIの省略値は OUTPUT(*NONE)であるが
コンパイル・リストが出力されないとSQL文の文法エラーが
あったときの原因を追究できないので必ず
OUTPUT(*PRINT) と指定しておくこと。

コンパイル・リストの一部を紹介しよう。

121 C*EXEC SQL DECLARE C1 CURSOR FOR                          
122 C*  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME          
123 C*         FROM QTRFIL/TANTOM, QTRFIL/BUKAM               
124 C*         WHERE TBCODE = BKCODE                          
125 C*         ORDER BY TBCODE, TACODE                        
126 C*END-EXEC                                                
127 C*  カーソルをオープン                                    
128 C*EXEC SQL OPEN C1                                        
129 C*END-EXEC                                                
130 C                   Z-ADD     -4            SQLER6        
131 C     SQL_00002     IFEQ      0                           
132 C     SQL_00003     ORNE      *LOVAL                      
133 C                   CALL      SQLROUTE                    
134 C                   PARM                    SQLCA         
135 C                   PARM                    SQL_00000     
136 C                   ELSE                                
137 C                   CALL      SQLOPEN                   
138 C                   PARM                    SQLCA       
139 C                   PARM                    SQL_00000   
140 C                   END                                 
  :
  :

SQLのRPGソースはいったん

QTEMP/QSQLTEMP1

というQTEMPのソース・ファイルに展開される。
そしてQTEMP/QSQLTEMP1からCRTRPGPGMコンパイラーが走るという仕組みになっている。
つまり本当は QTEMP/QSQLTEMP1にあるようなRPGソースをRPGプログラマーに書いて欲しいのだが
非常に複雑なためIBMが QTEMP/QSQLTEMP1 に展開してくれているのである。

121 C*EXEC SQL DECLARE C1 CURSOR FOR                          
122 C*  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME          
123 C*         FROM QTRFIL/TANTOM, QTRFIL/BUKAM               
124 C*         WHERE TBCODE = BKCODE                          
125 C*         ORDER BY TBCODE, TACODE                        
126 C*END-EXEC     

でわかるように C+ で記述したSQL文は完全にコメント・アウトされて

130 C                   Z-ADD     -4            SQLER6        
131 C     SQL_00002     IFEQ      0                           
132 C     SQL_00003     ORNE      *LOVAL                      
133 C                   CALL      SQLROUTE                    
134 C                   PARM                    SQLCA         
135 C                   PARM                    SQL_00000     
136 C                   ELSE                                
137 C                   CALL      SQLOPEN                   
138 C                   PARM                    SQLCA       
139 C                   PARM                    SQL_00000   
140 C                   END  

 

として展開されている。
ところでここでの注目は

133 C                   CALL      SQLROUTE

である。
 これらは

0067.00 D  SQLROUTE       C                   CONST('QSYS/QSQROUTE') 
0068.00 D  SQLOPEN        C                   CONST('QSYS/QSQLOPEN') 
0069.00 D  SQLCLSE        C                   CONST('QSYS/QSQLCLSE') 
0070.00 D  SQLCMIT        C                   CONST('QSYS/QSQLCMIT') 

 

として定義されているように QSYSにある SQLの実行APIである。
特に QSQROUTE という名前のAPIがSQL文を実行するAPIであり
QUERYもSQLも実行の中枢をなしているのはこの QSQROUTE というAPI(プログラム)
である。
このことからわかるように SQLQUERYが導入されていない環境であっても
QSQROUTEQSYSに存在しているので SQLQUERYを実行することが
できることがわかる。

次は QTEMP/QSQLTEMP1に展開されたSQLPRINTのソースの全容である。
元のソースと比較してみて欲しい。

0001.00 H DEBUG DFTNAME(SQLPRINT) DATEDIT(*YMD/)                                           
0002.00 F********** SQL 担当者マスター一覧表 *****************************                 
0003.00 FQPRINT    O    F  132        PRINTER OFLIND(*INOF)                                
0004.00 F                                     FORMLEN(66)                                  
0005.00 F                                     FORMOFL(62)                                  
0006.00 F*****************************************************************                 
0007.00  *[ COMPILE ]                                                                      
0008.00  * CRTSQLRPGI QTEMP/SQLPRINT SRCFILE(QTRSRC/QRPGLESRC) COMMIT(*NONE)               
0009.00  *                     OBJTYPE(*MODULE) OUTPUT(*PRINT)                             
0010.00  * CRTPGM     QTROBJ/SQLPRINT MODULE(QTEMP/SQLPRINT) ACTGRP(*NEW) AUT(*ALL)        
0011.00  *                                                                                 
0012.00  *[ 実行 ]                                                                         
0013.00  *  CALL QTROBJ/SQLPRINT                                                           
0014.00                                                                                    
0015.00 D HDR             S             32    DIM(1) CTDATA PERRCD(1)               見出し 
0016.00 D LIN             S              1    DIM(132)                                     
0017.00 D KENSU           S              4S 0                                              
0018.00 D TBCODE_B        S              2A                                                
0019.00 D*( データ・ベース外部データ構造 )                                                 
0020.00 D FMT001        E DS                  EXTNAME(TANTOM)                              
0021.00 D FMT002        E DS                  EXTNAME(BUKAM)                               
0022.00 D RCDDTA          DS                  OCCURS(9999)                                 
0023.00 D  VAR1                   1   1024                                                 
0024.00 D N               S              4B 0                                  
0025.00 C******************************************************                
0026.00 C*    SQL 文のカーソルの前準備                                         
0027.00 C******************************************************                
0028.00 C* SELECT 文によってカーソル C1 を用意                                 
0029.00 D*      SQL COMMUNICATION AREA                                         
0030.00 D SQLCA           DS                                                   
0031.00 D  SQLCAID                       8A   INZ(X'0000000000000000')         
0032.00 D  SQLAID                        8A   OVERLAY(SQLCAID)                 
0033.00 D  SQLCABC                      10I 0                                  
0034.00 D  SQLABC                        9B 0 OVERLAY(SQLCABC)                 
0035.00 D  SQLCODE                      10I 0                                  
0036.00 D  SQLCOD                        9B 0 OVERLAY(SQLCODE)                 
0037.00 D  SQLERRML                      5I 0                                  
0038.00 D  SQLERL                        4B 0 OVERLAY(SQLERRML)                
0039.00 D  SQLERRMC                     70A                                    
0040.00 D  SQLERM                       70A   OVERLAY(SQLERRMC)                
0041.00 D  SQLERRP                       8A                                    
0042.00 D  SQLERP                        8A   OVERLAY(SQLERRP)                 
0043.00 D  SQLERR                       24A                                    
0044.00 D   SQLER1                       9B 0 OVERLAY(SQLERR:*NEXT)            
0045.00 D   SQLER2                       9B 0 OVERLAY(SQLERR:*NEXT)            
0046.00 D   SQLER3                       9B 0 OVERLAY(SQLERR:*NEXT)            
0047.00 D   SQLER4                       9B 0 OVERLAY(SQLERR:*NEXT)            
0048.00 D   SQLER5                       9B 0 OVERLAY(SQLERR:*NEXT)      
0049.00 D   SQLER6                       9B 0 OVERLAY(SQLERR:*NEXT)      
0050.00 D   SQLERRD                     10I 0 DIM(6)  OVERLAY(SQLERR)    
0051.00 D  SQLWRN                       11A                              
0052.00 D   SQLWN0                       1A   OVERLAY(SQLWRN:*NEXT)      
0053.00 D   SQLWN1                       1A   OVERLAY(SQLWRN:*NEXT)      
0054.00 D   SQLWN2                       1A   OVERLAY(SQLWRN:*NEXT)      
0055.00 D   SQLWN3                       1A   OVERLAY(SQLWRN:*NEXT)      
0056.00 D   SQLWN4                       1A   OVERLAY(SQLWRN:*NEXT)      
0057.00 D   SQLWN5                       1A   OVERLAY(SQLWRN:*NEXT)      
0058.00 D   SQLWN6                       1A   OVERLAY(SQLWRN:*NEXT)      
0059.00 D   SQLWN7                       1A   OVERLAY(SQLWRN:*NEXT)      
0060.00 D   SQLWN8                       1A   OVERLAY(SQLWRN:*NEXT)      
0061.00 D   SQLWN9                       1A   OVERLAY(SQLWRN:*NEXT)      
0062.00 D   SQLWNA                       1A   OVERLAY(SQLWRN:*NEXT)      
0063.00 D  SQLWARN                       1A   DIM(11) OVERLAY(SQLWRN)    
0064.00 D  SQLSTATE                      5A                              
0065.00 D  SQLSTT                        5A   OVERLAY(SQLSTATE)          
0066.00 D*  END OF SQLCA                                                 
0067.00 D  SQLROUTE       C                   CONST('QSYS/QSQROUTE')     
0068.00 D  SQLOPEN        C                   CONST('QSYS/QSQLOPEN')     
0069.00 D  SQLCLSE        C                   CONST('QSYS/QSQLCLSE')     
0070.00 D  SQLCMIT        C                   CONST('QSYS/QSQLCMIT')     
0071.00 D  SQFRD          C                   CONST(2)                   
0072.00 D  SQFCRT         C                   CONST(8)                   
0073.00 D  SQFOVR         C                   CONST(16)                  
0074.00 D  SQFAPP         C                   CONST(32)                  
0075.00 D                 DS                                             
0076.00 D  SQL_00000              1      2B 0 INZ(128)                   
0077.00 D  SQL_00001              3      4B 0 INZ(2)                     
0078.00 D  SQL_00002              5      8B 0 INZ(0)                     
0079.00 D  SQL_00003              9      9A   INZ('0')                   
0080.00 D  SQL_00004             10    127A                              
0081.00 D  SQL_00005            128    128A                              
0082.00 D                 DS                                             
0083.00 D  SQL_00006              1      2B 0 INZ(128)                   
0084.00 D  SQL_00007              3      4B 0 INZ(4)                     
0085.00 D  SQL_00008              5      8B 0 INZ(0)                     
0086.00 D  SQL_00009              9      9A   INZ('0')                   
0087.00 D  SQL_00010             10    127A                              
0088.00 D  SQL_00011            129    132A                              
0089.00 D  SQL_00012            133    154A                              
0090.00 D  SQL_00013            155    156A                              
0091.00 D  SQL_00014            157    164A                              
0092.00 D  SQL_00015            165    174A                              
0093.00 D                 DS                                             
0094.00 D  SQL_00016              1      2B 0 INZ(128)                   
0095.00 D  SQL_00017              3      4B 0 INZ(5)                     
0096.00 D  SQL_00018              5      8B 0 INZ(0)              
0097.00 D  SQL_00019              9      9A   INZ('0')            
0098.00 D  SQL_00020             10    127A                       
0099.00 D  SQL_00021            128    128A                       
0100.00 D                 DS                                      
0101.00 D  SQL_00022              1      2B 0 INZ(128)            
0102.00 D  SQL_00023              3      4B 0 INZ(6)              
0103.00 D  SQL_00024              5      8B 0 INZ(0)              
0104.00 D  SQL_00025              9      9A   INZ('0')            
0105.00 D  SQL_00026             10    127A                       
0106.00 D  SQL_00027            128    128A                       
0107.00 C*EXEC SQL DECLARE C1 CURSOR FOR                          
0108.00 C*  SELECT TACODE, TTNAMJ, TBCODE, TTNAM, BKNAME          
0109.00 C*         FROM QTRFIL/TANTOM, QTRFIL/BUKAM               
0110.00 C*         WHERE TBCODE = BKCODE                          
0111.00 C*         ORDER BY TBCODE, TACODE                        
0112.00 C*END-EXEC                                                
0113.00 C*  カーソルをオープン                                    
0114.00 C*EXEC SQL OPEN C1                                        
0115.00 C*END-EXEC                                                
0116.00 C                   Z-ADD     -4            SQLER6        
0117.00 C     SQL_00002     IFEQ      0                           
0118.00 C     SQL_00003     ORNE      *LOVAL                      
0119.00 C                   CALL      SQLROUTE                    
0120.00 C                   PARM                    SQLCA                  
0121.00 C                   PARM                    SQL_00000              
0122.00 C                   ELSE                                           
0123.00 C                   CALL      SQLOPEN                              
0124.00 C                   PARM                    SQLCA                  
0125.00 C                   PARM                    SQL_00000              
0126.00 C                   END                                            
0127.00 C******************************************************            
0128.00 C*            明  細  演  算                                 
0129.00 C******************************************************            
0130.00 C*EXEC SQL WHENEVER NOT FOUND GOTO EOF                             
0131.00 C*END-EXEC                                                         
0132.00 C     1             DO        *HIVAL        N                      
0133.00 C     N             OCCUR     RCDDTA                               
0134.00 C*EXEC SQL                                                         
0135.00 C*   FETCH C1 INTO :TACODE, :TTNAMJ, :TBCODE, :TTNAM, :BKNAME      
0136.00 C*END-EXEC                                                         
0137.00 C                   Z-ADD     -4            SQLER6                 
0138.00 C                   CALL      SQLROUTE                             
0139.00 C                   PARM                    SQLCA                  
0140.00 C                   PARM                    SQL_00006              
0141.00 C     SQL_00009     IFEQ      '1'                                  
0142.00 C                   EVAL      TACODE = SQL_00011                   
0143.00 C                   EVAL      TTNAMJ = SQL_00012                   
0144.00 C                   EVAL      TBCODE = SQL_00013                    
0145.00 C                   EVAL      TTNAM = SQL_00014                     
0146.00 C                   EVAL      BKNAME = SQL_00015                    
0147.00 C                   END                                             
0148.00 C     SQLCOD        CABEQ     100           EOF                     
0149.00 C     SQLSTT        CABEQ     '02000'       EOF                     
0150.00 C*( 明細印刷 )                                                      
0151.00 C*    TACODE        CAT(P)    TTNAMJ:0      RCDDTA                  
0152.00 C                   MOVEL(P)  TACODE        RCDDTA                  
0153.00 C                   CAT       TTNAMJ:0      RCDDTA                  
0154.00 C*EXEC SQL SET RESULT SETS ARRAY :RCDDTA FOR :N ROWS                
0155.00 C*END-EXEC                                                          
0156.00 C                   EVAL      SQLER5       = N                      
0157.00 C     1             OCCUR     RCDDTA                                
0158.00 C                   Z-ADD     -4            SQLER6                  
0159.00 C                   CALL      SQLROUTE                              
0160.00 C                   PARM                    SQLCA                   
0161.00 C                   PARM                    SQL_00016               
0162.00 C                   PARM                    RCDDTA                  
0163.00 C     SQLCOD        CABEQ     100           EOF                     
0164.00 C     SQLSTT        CABEQ     '02000'       EOF                     
0165.00 C*------------------------------------------------------------------
0166.00 C                   SETON                                        42 
0167.00 C                   EXSR      OUTPUT                                
 SEU==>                                                                           
0168.00 C*------------------------------------------------------------------      
0169.00 C                   ADD       1             KENSU                         
0170.00 C                   ENDDO                                                 
0171.00 C     EOF           TAG                                                   
0172.00 C*  カーソルをクローズ                                                    
0173.00 C*EXEC SQL CLOSE C1                                                       
0174.00 C*END-EXEC                                                                
0175.00 C                   Z-ADD     6             SQLER6                        
0176.00 C     SQL_00024     IFEQ      0                                           
0177.00 C                   CALL      SQLROUTE                                    
0178.00 C                   PARM                    SQLCA                         
0179.00 C                   PARM                    SQL_00022                     
0180.00 C                   ELSE                                                  
0181.00 C                   CALL      SQLCLSE                                     
0182.00 C                   PARM                    SQLCA                         
0183.00 C                   PARM                    SQL_00022                     
0184.00 C                   END                                                   
0185.00 C     SQLCOD        CABEQ     100           EOF                           
0186.00 C     SQLSTT        CABEQ     '02000'       EOF                           
0187.00 C     END           TAG                                                   
0188.00 C*------------------------------------------------------------------      
0189.00 C                   SETON                                        49       
0190.00 C                   EXSR      OUTPUT                                      
0191.00 C*------------------------------------------------------------------      
0192.00 C                   SETON                                        LR    
0193.00 C******************************************************                
0194.00 C     *INZSR        BEGSR                                              
0195.00 C******************************************************                
0196.00 C*  初期のみの実行                                                     
0197.00 C                   CLEAR                   FMT001                     
0198.00 C                   MOVEA     *ALL'-'       LIN                        
0199.00 C     INZEND        ENDSR                                              
0200.00 C******************************************************                
0201.00 C     OUTPUT        BEGSR                                              
0202.00 C******************************************************                
0203.00 C     TBCODE        IFNE      TBCODE_B                                 
0204.00 C                   SETOFF                                       40    
0205.00 C                   ENDIF                                              
0206.00 C  N40              SETON                                        4041  
0207.00 C                   EXCEPT                                             
0208.00 C   OF              SETOFF                                       40OF  
0209.00 C                   SETOFF                                       414243
0210.00 C                   SETOFF                                       444546
0211.00 C                   SETOFF                                       474849
0212.00 C                   MOVE      TBCODE        TBCODE_B                   
0213.00 C                   ENDSR                                              
0214.00 OQPRINT    E    41                     2 06                            
0215.00 O                       UDATE         Y      8                         
0216.00 O                                           14 ' 作成 '               
0217.00 O                       HDR(1)              82                        
0218.00 O                                          128 'PAGE.'                
0219.00 O                       PAGE          Z    131                        
0220.00 O          E    41                     1                              
0221.00 O                                           12 ' 部課コード '         
0222.00 O                       TBCODE              18                        
0223.00 O                                           24 ' 部課名 '             
0224.00 O                       BKNAME              36                        
0225.00 O          E    41                     1                              
0226.00 O                       LIN                132                        
0227.00 O          E    41                     1                              
0228.00 O                                           14 ' 担当者コード '       
0229.00 O                                           24 ' 担当者名 '           
0230.00 O                                           44 ' 略名 '               
0231.00 O          E    41                     1                              
0232.00 O                       LIN                132                        
0233.00 O          E    42                     2                              
0234.00 O                       TACODE               5                        
0235.00 O                       TTNAMJ              36                        
0236.00 O                       TTNAM               46                        
0237.00 O          E    49                     1                              
0238.00 O                                           40 ' 処理件数 '           
0239.00 O                                           57 '. . . . . . . . .'    
0240.00 O                       KENSU         2     65
0241.00 DR                                            
0241.00 **  HDR      
0242.00  担当者一覧表