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
は SQLのSELECT文で 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文はカーソルのデータを一行ずつ取り出すRPGのREAD命令のようなものである。
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(プログラム)
である。
このことからわかるように SQLやQUERYが導入されていない環境であっても
QSQROUTE は QSYSに存在しているので SQLやQUERYを実行することが
できることがわかる。
次は 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 担当者一覧表