SQL-RPGをチョット勉強 その2
前回の続きで、SQL-RPGで、1行ずつFetchして、社員名を表示する例
- DDSの例
A***************************************************************** A* MSA00F 社員マスター 09/07/08 CSC * A***************************************************************** A UNIQUE A R MSA00FR TEXT('社員マスター') A MSA001 3S 0 COLHDG('社員コード') A* A MSA002 32O COLHDG('社員フリガナ') A MSA003 16O COLHDG('社員名') A MSA004 8S 0 COLHDG('入社年月日') A MSA005 1A COLHDG('職務コード') A MSA900 8S 0 COLHDG('作成日') A MSA901 6S 0 COLHDG('作成時間') A MSA902 8S 0 COLHDG('変更日') A MSA903 6S 0 COLHDG('変更時間') A*KEY A K MSA001
- RPGの例
H DATEDIT(*YMD) H COPYRIGHT('(C) CHUBU SYSTEM CO,.LTD 1996 - ') /IF DEFINED(*CRTBNDRPG) H DFTACTGRP(*NO) ACTGRP(*CALLER) /ENDIF D*-----<<メインプロシージャ・プロトタイプ定義>>-----* D*-----<<サブプロシージャ・プロトタイプ>>-----* D OPEN_CURSOR PR N D FETCH_CURSOR PR N D CLOSE_CURSOR PR N D*-----<<変数>>-----* D****************************************************************** D* C*-------------------------------------------------------------------* C*----------<< FREE FORMAT >>-------* C*-------------------------------------------------------------------* /FREE // 1行ずつのFETCH (NEXT:順読み) IF NOT OPEN_CURSOR() ; // OPEN ERROR DEFINED ELSE ; DOW FETCH_CURSOR() ; ENDDO ; CLOSE_CURSOR() ; ENDIF ; *INLR = *ON ; RETURN ; /END-FREE P**************************************************************** P** < OPEN_CURSOR > :カーソルオープン処理 ** P**------------------------------------------------------------** P** RETURN : *ON=正常オープン,*OFF=エラー ** P**------------------------------------------------------------** P**************************************************************** P OPEN_CURSOR B D OPEN_CURSOR PI N D*<変数> D RETURN_VAR S N /FREE //カーソル定義 EXEC SQL DECLARE C1 CURSOR FOR SELECT * FROM MSA00F ORDER BY MSA001 ; //カーソルオープン EXEC SQL OPEN C1 ; IF SQLSTT = '00000' ; // 00000:操作正常終了 RETURN_VAR = *ON ; ELSE ; RETURN_VAR = *OFF; ENDIF ; RETURN RETURN_VAR ; /END-FREE P E P**************************************************************** P** < FETCH_CURSOR > :カーソル読取処理 ** P**------------------------------------------------------------** P** RETURN : *ON=正常読取,*OFF=EOF又はエラー ** P**------------------------------------------------------------** P**************************************************************** P FETCH_CURSOR B D FETCH_CURSOR PI N D*<変数> D RETURN_VAR S N D ROW E DS EXTNAME(MSA00F) D QUALIFIED /FREE //カーソル読み込み //単一行の取り出し EXEC SQL FETCH NEXT FROM C1 INTO :ROW ; SELECT ; WHEN SQLSTT = '00000' ; // 00000:操作正常終了 DSPLY (ROW.MSA003) ; RETURN_VAR = *ON ; WHEN SQLSTT = '02000' ; // 02000:EOF RETURN_VAR = *OFF ; OTHER ; // RETURN_VAR = *OFF ; ENDSL ; RETURN RETURN_VAR ; /END-FREE P E P**************************************************************** P** < CLOSE_CURSOR > :カーソルクローズ処理 ** P**------------------------------------------------------------** P** RETURN : *ON=正常クローズ.*OFF=エラー ** P**------------------------------------------------------------** P**************************************************************** P CLOSE_CURSOR B D CLOSE_CURSOR PI N D*<変数> D RETURN_VAR S N /FREE //カーソルクローズ EXEC SQL CLOSE C1 ; SELECT ; WHEN SQLSTT = '00000' ; // 00000:操作正常終了 RETURN_VAR = *ON ; OTHER ; // RETURN_VAR = *OFF ; ENDSL ; RETURN RETURN_VAR ; /END-FREE P E
動的SQLの記述も出来る様ですが、まだ解説を見ておりません。
初めてのHudson
Antタスクのスケジュール用に、会社のWindows PCにこちらを参考に、Hudsonを入れてみましたので、忘れないように(小ハマリもあったので)メモしときます。
本来は、SVNなどのリポジトリに変更があった場合や別のビルドと連動して、ビルドしたりするケースなど、色々なビルドトリガが、使えて便利なようです。確かにスケジュールだけなら、cronやWindows Taskで十分ですから。でもせっかくなんで、Hudson入れてみます。
導入〜起動
導入から起動までの手順です。
- Hudsonのサイトから、ダウンロード(右のDownload)
- ダウンロードした、hudson.warを適当なフォルダに配置
- コマンドプロンプトで、配置したフォルダをカレントにフォルダにして、「java -jar hudosn.war」を実行
- 「http://localhost:8080/」でHudson画面を表示
いきなり日本語なのが、凄くウレシイです。
「java -jar hudosn.war --help」でオプションが表示されます。ポートを変えたりするオプション"--httpPort"などを確認出来ます。「java -jar hudosn.war --httpPort=8081」で8081ポートで実行。
フリースタイルプロジェクトのビルド
とりあえずAntタスクの定期実行を試すだけなので、まずは、「フリースタイルプロジェクトのビルド」を実行してみます。
- Antの設定をする。「Hudsonの管理」→「システム設定」→「Ant」で、自動インストールのチェックを外して、インストール済みAntを”ANT_HOME”に指定(Ant単体でインストールしてなかったのでとりあえず、Eclipseのantを使いました)”保存”ボタンで設定完了。
- ジョブの作成。「新規ジョブ作成」で”ジョブ名”と”フリースタイル・プロジェクトのビルド”を選んで、”OK”ボタンで次へ
- ジョブの設定。
- ”説明”欄に説明を記入
- ”ビルドトリガ”の指定は、”定期的に実行”を選択
- ”使用するAnt”は、「1」で設定したAntを選択
- ”ビルドファイル”に”build.xml”等の存在するパスを指定
- ”保存”ボタンで設定完了
- 「3」で作成したジョブを選んで、「ビルド実行」で、正常にビルド出来るか確認。
HudsonをWindowsサービスで実行
HudsonをWindowsサービスで実行させようと、思いやってみましたが、またまたハマッタのでメモしときます。
サービスのインストール自体は、非常に簡単です。
- Hudsonの管理を開く
- Windowsのサービスとしてインストールを選択
- サービスのインストール先を指定する
- 実行ボタンをクリックして、サービスを開始する
しかし、サービスの開始がされず、下の表示のまま変わらない...。
プロンプト画面を見ると、エラーが投げられていた。
それではと、手動でサービスを開始すると、「"ローカルコンピュータ上の テストサービス サービスは起動して停止しました。パフォーマンスログ、警告サービスなど、一部のサービスは作業がない場合に自動的に停止します"」と言われて開始できない。
もう一度インストールをと思い実行しても、既にサービスがあるから駄目みたい。
ならばと、プロンプトから「sc.exe delete hudson」でサービスを削除して、再度インストール&実行。でも結果は同じ...。
ふと、イベントビューアのアプリケーションログを見ると、古いログで一杯。
これを消去して、ついでに一杯になったら、上書きされるように設定変更。それから、サービスを開始したら、無事出来ました。
サービスで動くポート等は、インストール先フォルダの「hudson.xml」を変えれば良さそうです。port8080は他のアプリと、かち合う可能性が大なので、8086あたり「netstat -an | find "8086"」で、使ってないか調べて変更しときました。
新たにインストールした先には、前回せっかく作ったジョブがないので、「$USER_HOME/.hudson」の中身をコピペします。Hudson再起動でジョブが戻りました。