プログラム学習室 http://studyhallweb.com/

AS/400 プログラム内でのSQLの使い方

ILE-RPGでのSQLの使用

◆注意事項
メンバーのタイプをSQLPRGLEとする
コンパイルはCRTSQLRPGIを使う

コミットメント処理を行うには対象となるファイルのジャーナルを取る必要がある
デフォルトの設定ではコミットメントを行うことになっているので注意が必要
ファイルをジャーナルの対象としたくないときは、コンパイルオプションCOMMIT(*NONE)を指定する

変数名の始めに:をつければSQLの中でホスト変数を使える(例の中の@VAL参照)

◆サンプル1
     C                   EVAL      @VAL = 7
     C/EXEC SQL INSERT INTO FOOA
     C+    VALUES('Data', CURDATE(), CURTIME(), DATE('2003-04-10'), :@VAL)
     C/END-EXEC
     C/EXEC SQL COMMIT
     C/END-EXEC
     C                   SETON                                        LR
     C                   RETURN
				
※最後にSETON/RETURNをつけないとRPGプログラムとしてダメ

◆サンプル2
複数行一括して挿入する INSERT INTO ROWS の使い方
     D*
     D* ホスト変数の宣言
     D @DAT            DS                  OCCURS(5)
     D   @NAME                       30
     D   @ADRE                       50
     C*
     C* パラメータの宣言
     C*   5レコード分を5個のパラメータ(P01~P05)として受け取る
     C     *ENTRY        PLIST
     C                   PARM                    @P01             80
     C                   PARM                    @P02             80
     C                   PARM                    @P03             80
     C                   PARM                    @P04             80
     C                   PARM                    @P05             80
     C                   PARM                    @RTN              2
     C*
     C* パラメータで受け取った値を @DAT に代入する
     C     1             OCCUR     @DAT
     C                   MOVE      @P01          @DAT
     C     2             OCCUR     @DAT
     C                   MOVE      @P02          @DAT
     C     3             OCCUR     @DAT
     C                   MOVE      @P03          @DAT
     C     4             OCCUR     @DAT
     C                   MOVE      @P04          @DAT
     C     5             OCCUR     @DAT
     C                   MOVE      @P05          @DAT
     C*
     C* 5行まとめて INSERT
     C/EXEC SQL
     C+    INSERT INTO TEST01P 5 ROWS VALUES (:@DAT)
     C/END-EXEC
     C*
     C* 結果の取得
      /FREE
           IF SQLCOD = 0 AND SQLWN0 = '';
               @RTN = 'OK';
           ELSE;
               @RTN = 'NG';
           ENDIF;
      /END-FREE
     C                   SETON                                        LR
     C                   RETURN
				
SQLを実行すると、SQLCODにはエラーコード、SQLWN0には警告が入る
この値はRPGの中で使える
詳しくはSQL解説書のSQLCA参照

RUNSQLSTMを使ったSQLの実行方法

[例] RUNSQLSTM SRCFILE(QCLSRC) SRCMBR(TSTSQL01) COMMIT(*NONE)

SRCFILEに'SQL'タイプのメンバー(上記例ではTSTSQL01)を作成し、そのメンバーにSQL文を記載する
COMMIT(*NONE)を指定していないとコミット制御のためのジャーナルが有効になっていないとSQL7008エラーが出る

■JavaからSQLの実行方法(JDBC)

◆実行環境
JOBのCCSID=3035
エミュレータの文字コード=939
WRKENVVAR で環境変数 CLASSPAHT='.' をセットしておくこと
STRQSHでQShell上で実行のこと

◆サンプル
import java.sql.*;

public class TestJdbc {

    public static void main(String[] args) {
        try {
            ClsSQL oSQL = new ClsSQL();
            oSQL.connDb("ID", "PASSWORD");
            System.out.println("Connect Ok");

            ResultSet rs = oSQL.exeSQL("SELECT DATFLD FROM LIB.FILE");
            while (rs.next()) {
                System.out.println(rs.getBigDecimal(1));	// DATAFLDが数値
            }

            oSQL.disconDb();
            System.out.println("Dis connect Ok");
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}
				

■リンク

◆ExcelからAS400にアクセスする方法はこちら
◆NotesからAS400にアクセスする方法はこちら
◆SQLのより詳しい説明はこちら