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の記述も出来る様ですが、まだ解説を見ておりません。