7.2 での変更点
この節では、7.2 の ILE RPG における機能強化について説明します。
- 自由形式の、制御ステートメント、ファイル・ステートメント、定義ステートメント、およびプロシージャー・ステートメント
- 自由形式の制御ステートメントは、CTL-OPT で始まり、
セミコロンで終わります。自由形式の制御ステートメントを参照してください。
CTL-OPT OPTION(*SRCSTMT : *NODEBUGIO) ALWNULL(*USRCTL); - 自由形式のファイル定義ステートメントは、DCL-F で始まり、
セミコロンで終わります。自由形式のファイル定義ステートメントを参照してください。下記のステートメント は次の 3 つのファイルを定義しています。
- 入力および更新用にオープンされる外部記述 DISK ファイル。
- 入力および出力用にオープンされる外部記述 WORKSTN ファイル。
- レコード長が 132 のプログラム記述 PRINTER ファイル。
DCL-F custFile usage(*update) extfile(custFilename); DCL-F screen workstn; DCL-F qprint printer(132) oflind(qprintOflow); - 自由形式のデータ定義ステートメントは、DCL-C、DCL-DS、DCL-PI、DCL-PR、
または DCL-S で始まり、セミコロンで終わります。自由形式の定義ステートメントを参照してください。下記の ステートメントは、いくつかの項目を定義しています。
- 名前付き定数 MAX_ELEMS。
- 可変長の独立文字フィールド fullName。
- 整数サブフィールド num と UCS-2 サブフィールド address を含む、修飾されたデータ構造。
- プロシージャー「Qp0lRenameUnlink」のプロトタイプ。
DCL-C MAX_ELEMS 1000; DCL-S fullName VARCHAR(50) INZ('Unknown name'); DCL-DS ds1 QUALIFIED; num INT(10); address UCS2(100); END-DS; DCL-PR Qp0lRenameUnlink INT(10) EXTPROC(*DCLCASE); oldName POINTER VALUE OPTIONS(*STRING); newName POINTER VALUE OPTIONS(*STRING); END-PR; - 自由形式のプロシージャー定義ステートメントは、DCL-PROC で始まり、
セミコロンで終わります。プロシージャーを終了するために END-PROC ステートメント
が使用されます。自由形式のプロシージャー・ステートメントを参照してください。
次の 例は、自由形式のサブプロシージャー定義の例です。
DCL-PROC getCurrentUserName EXPORT; DCL-PI *n CHAR(10) END-PI; DCL-S curUser CHAR(10) INZ(*USER); RETURN curUser; END-PROC; - /FREE 指示および /END-FREE 指示は必要ではなくなりました。コンパイラーはそれらを無視します。
- 自由形式ステートメントと固定形式ステートメントを混在させることができます。
IF endDate < beginDate; C GOTO internalError ENDIF; duration = %DIFF(endDate : beginDate : *days); . . . C internalError TAG
ヒント: 認識しておく必要のある固定形式と自由形式の相違点を参照してください。- 自由形式の制御ステートメントは、CTL-OPT で始まり、
セミコロンで終わります。自由形式の制御ステートメントを参照してください。
- 英数字データの CCSID のサポート
- モジュールのデフォルト英数字 CCSID として、UTF-8 および 16 進を含めて、より多くの CCSID を設定できるようになりました。
- 英数字データを CCSID を指定して定義できます。サポートされる CCSID は次のとおりです。
- 1 バイトおよび混合バイトの EBCDIC CCSID
- 1 バイトおよび混合バイトの ASCII CCSID
- UTF-8
- 16 進数
- 外部英数字サブフィールドの CCSID
- 外部記述データ構造に対して CCSID(*EXACT) を使用して、 英数字サブフィールドの CCSID がファイル内のフィールドの CCSID と 同じである必要があることを示します。
- 16 進データでは CCSID 変換は実行されない
- 16 進データの暗黙的または
明示的変換では CCSID 変換は許可されていません。16 進データには、次のものがあります。
- 16 進数リテラル
- CCSID(*HEX) を指定して定義された英数字データおよびグラフィック・データ
- ファイルに対して DATA キーワードが有効であり、かつ、ファイル内のフィールドの CCSID が 65535 である場合、 外部記述ファイル用のバッファー内にある英数字データおよびグラフィック・データ
- ファイル内のフィールドの CCSID が 65535 である場合、 CCSID(*EXACT) を指定して定義された外部記述データ構造内の英数字データおよびグラフィック・データ
- 連結のための暗黙的な変換
- コンパイラーは、連結式のために、英数字データ、グラフィック・データ、および UCS-2 データ の間の暗黙的な変換を実行します。変換を参照してください。
- ジョブ CCSID への変換なしでのデータベース・ファイルのオープン
- 制御キーワード OPENOPT(*NOCVTDATA) またはファイル・キーワード DATA(*NOCVT) を 使用することによって、データベース・ファイルがオープンされるときに、英数字データおよびグラフィック・データに 対するジョブ CCSID からの変換およびジョブ CCSID への変換が入出力操作の際に実行されないようにオープンされることを指定できます。 OPENOPT (* {NO }INZOFL * {NO }CVTDATA)を参照してください。
- デフォルト CCSID、日付形式、または時刻形式の一時的な変更
- /SET 指示と /RESTORE 指示を使用することによって、 日付形式、時刻形式、および CCSID のデフォルト値を設定できます。 /SETを参照してください。
- %SUBDT によって戻される長さの制御
- 任意指定のパラメーターである %SUBDT の第 3 パラメーターを使用して、
結果の桁数を指定できます。
例えば、%SUBDT(MyDate:*YEARS:4) と指定すると、年数の値を 4 桁の値として戻すことができます。
%SUBDT (日付、時刻、またはタイム・スタンプの一部の取り出し)を参照してください。
- タイム・スタンプ・データの精度向上
- タイム・スタンプ・データは、0 から 12 桁の秒の小数部を含むことができます。 タイム・スタンプ・データ・タイプを参照してください。
- オープン・アクセス・ファイル
- オープン・アクセス・ファイルは、オペレーティング・システムではなく、ユーザー作成のプログラムまたはプロシージャー によってすべての処理が行われるファイルです。このプログラムまたはプロシージャーは「オープン・アクセス・ハンドラー」または 単に「ハンドラー」と呼ばれます。HANDLER キーワードがハンドラーを指定します。オープン・アクセス・ファイルを参照してください。
- XML-INTO の新規オプション
-
- "ns" オプションおよび "nsprefix" オプションによって XML 名前空間がサポートされます。ns オプションおよび nsprefix オプションを参照してください。
- サブフィールド名に使用することを RPG がサポートしていない文字を含む XML 名 が "case=convert" オプションによってサポートされます。case オプションを参照してください。
- ソース文字がターゲット文字セット中に存在しない場合はデータ逸失を起こす CCSID 変換のサポート
- 制御仕様キーワード CCSIDCVT(*EXCP : *LIST)。 CCSIDCVT(*EXCP | *LIST)を参照してください。
- CCSIDCVT(*EXCP) を使用すると、ソース文字と一致するものがターゲット文字セット中にないことが原因で CCSID 変換で データ逸失が起こった場合には例外を取得することができます。
- CCSIDCVT(*LIST) を使用すると、モジュール内のすべての CCSID 変換のリストを取得でき、 リスト中の各変換についてデータ逸失の可能性があるかどうかが診断メッセージで示されます。
- RPG コンパイラーが日付データ、時刻データ、およびタイム・スタンプ・データ を処理中に妥当性検査ステップをスキップすることを許可する VALIDATE(*NODATETIME)
-
制御仕様書キーワード VALIDATE(*NODATETIME) を使用すると、 RPG コンパイラーは、妥当性検査を行わずに、日付データ、時刻データ、およびタイム・スタンプ・データ を文字データとして扱うことができます。VALIDATE(*NODATETIME)を参照してください。
これによって、 日付、時刻、およびタイム・スタンプに関する一部の操作のパフォーマンスが向上する可能性があります。
警告: 妥当性検査ステップを スキップすることによって重大なデータ破壊問題が起こる場合があります。この機能を使用するのは、日付データ、時刻データ、およびタイム・スタンプ・データ が常に有効であるという確信がある場合に限定するべきです。

| 要素 | 説明 |
|---|---|
| CCSID キーワード |
|
| DFTACTGRP キーワード | 自由形式制御仕様があり、ACTGRP、BNDDIR、または STGMDL キーワードのうちの少なくとも 1 つが 使用されている場合、DFTACTGRP(*NO) が想定されます。DFTACTGRP(*YES | *NO)を参照してください。 |
| OPENOPT キーワード | OPENOPT(* {NO}CVT) は、データベース・ファイルに対する DATA キーワード
のデフォルトを制御します。
|


| 要素 | 説明 |
|---|---|
| /FREE および /END-FREE 指示 | 自由形式コードの始まりと終わりを示すためのこれらの指示は、 必要ではなくなりました。コンパイラーはこれらを無視します。/FREE... /END-FREEを参照してください。 |


| 要素 | 説明 |
|---|---|
| CCSID キーワード |
|
| DTAARA キーワード | 自由形式定義では、次のとおりです。
DTAARA キーワードを参照してください。 |
| EXTFLD キーワード | 自由形式のサブフィールド定義では、次のとおりです。
EXTFLD{(フィールド名) }を参照してください。 |
| EXTNAME キーワード | 自由形式のデータ構造定義では、次のとおりです。
EXTNAME(ファイル名{:形式名}{:*ALL| *INPUT|*OUTPUT|*KEY|*NULL})を参照してください。 |
| EXPORT および IMPORT キーワード | 自由形式定義では、次のとおりです。
EXPORT{(外部名)}および IMPORT{(外部名)}を参照してください。 |
| EXTPROC キーワード | 自由形式のプロトタイプ定義またはプロシージャー・インターフェース定義では、次のとおりです。
|
| LIKE キーワード | 自由形式定義で、LIKE キーワード
には長さ調整を指定する任意指定の第 2 パラメーターがあります。
LIKE(名前 {: 長さ調整 })を参照してください。 |
| LEN キーワード | 自由形式定義では、
データ構造定義に対してのみ LEN キーワードの使用が許可されています。
他の自由形式定義では、長さはデータ・タイプ・キーワードの一部として
指定されます。
LEN(長さ)を参照してください。 |
| CLASS、DATFMT、 PROCPTR、TIMFMT、および VARYING キーワード | これらのキーワードは、自由形式定義では使用されません。 これらのキーワードによって指定される情報は、関連するデータ・タイプ・キーワードの 一部として指定されます。 |
| FROMFILE、 PACKEVEN、および TOFILE キーワード | 自由形式定義では、これらのキーワードの使用は許可されません。 |
| OVERLAY キーワード | パラメーターに、自由形式サブフィールド定義のデータ構造の名前
を指定することはできません。代わりに POS キーワードが使用されます。 POS(開始位置)を参照してください。 |


| 要素 | 説明 |
|---|---|
| タイム・スタンプ・リテラル | タイム・スタンプ・リテラルは、0 から 12 桁の秒の小数部を含むことができます。 リテラルを参照してください。 |


| 要素 | 説明 |
|---|---|
| ファイルおよび定義ステートメント | ファイル・ステートメントと定義ステートメントを混在させることができます。 RPG IV の仕様書タイプを参照してください。 |


| 要素 | 説明 |
|---|---|
| %CHAR | オペランドがタイム・スタンプの場合、
戻り値の長さはタイム・スタンプのバイト数に基づきます。
形式が *ISO0 の場合、バイト数は、14 から 26 の間です。
形式が *ISO の場合、バイト数は、19、または 21 から 32 の間です。
%CHAR(日付|時刻|タイム・スタンプ {: 形式})を参照してください。 |
| %DEC | オペランドがタイム・スタンプの場合、
桁数は 14 から 26 の間であり、タイム・スタンプに含まれる秒の小数部の桁数に基づきます。
日付、時刻、またはタイム・スタンプ式を参照してください。 |
| %DIFF | オペランドがタイム・スタンプの場合、
任意指定の第 4 パラメーターが、戻される秒の小数部の桁数を指定します。
%DIFF (2 つの日付、時刻、またはタイム・スタンプ値の差)を参照してください。 |
| %SECONDS | %SECONDS を使用してタイム・スタンプに秒数を加算する場合、
パラメーターには小数点以下の秒数を指定する小数部も指定できます。
%SECONDS (秒数)を参照してください。 |
| %SUBDT |
%SUBDT (日付、時刻、またはタイム・スタンプの一部の取り出し)を参照してください。 |
| %TIMESTAMP |
%TIMESTAMP (タイム・スタンプへの変換)を参照してください。 |


| 要素 | 説明 |
|---|---|
| 長さ入力 | タイム・スタンプの長さを指定する入力項目は、19、または 21 から 32 までの
値にすることができます。 33 から 39 桁目 (終了位置/長さ)を参照してください。 |
| 「小数点以下の桁数」入力項目 | タイム・スタンプの小数部の桁数を指定する入力項目は、0 から 12 までの
値にすることができます。 41 から 42 桁目 (小数点以下の桁数)を参照してください。 |


| 要素 | 説明 |
|---|---|
| /SET 指示 | 以下の制御ステートメント・キーワードに新しい値を一時的に
設定します。
これらの値は、定義ステートメントでデフォルト値が明示的に指定されていない 場合にデフォルト値を提供するために使用されます。 /SETを参照してください。 |
| /RESTORE 指示 | 値を設定した最新の /SET 指示より前に設定されていた値に戻します。
|


| 要素 | 説明 |
|---|---|
| CTL-OPT | 自由形式の制御ステートメントを開始します。 自由形式の制御ステートメントを参照してください。 |
| DCL-F | 自由形式のファイル定義を開始します。 自由形式のファイル定義ステートメントを参照してください。 |
| DCL-C | 自由形式の名前付き定数定義を開始します。 自由形式の名前付き定数の定義を参照してください。 |
| DCL-DS | 自由形式のデータ構造定義を開始します。 自由形式のデータ構造定義を参照してください。 |
| DCL-SUBF | 自由形式のサブフィールド定義を開始します。サブフィールド名
が自由形式演算内で使用を許可されている命令コードのいずれかと同じで
ある場合を除いて、「DCL-SUBF」は任意指定です。 自由形式のサブフィールド定義を参照してください。 |
| END-DS | 自由形式のデータ構造定義を終了します。
サブフィールドがない場合、DCL-DS ステートメントの最後のキーワードの後に
これを指定することができます。 自由形式のデータ構造定義を参照してください。 |
| DCL-PI | 自由形式のプロシージャー・インターフェース定義を開始します。 自由形式プロシージャー・インターフェース定義を参照してください。 |
| DCL-PR | 自由形式のプロトタイプ定義を開始します。 自由形式のプロトタイプ定義を参照してください。 |
| DCL-PARM | 自由形式のパラメーター定義を開始します。パラメーター名
が自由形式演算内で使用を許可されている命令コードのいずれかと同じ
である場合を除いて、「DCL-PARM」は任意指定です。 自由形式のパラメーター定義を参照してください。 . |
| END-PI | 自由形式のプロシージャー・インターフェース定義を終了します。
パラメーターがない場合、DCL-PI ステートメントの最後のキーワードの後にこれを指定する
ことができます。 自由形式プロシージャー・インターフェース定義を参照してください。 |
| END-PR | 自由形式のプロトタイプ定義を終了します。パラメーターがない場合、DCL-PR ステートメントの最後のキーワードの後にこれを指定する
ことができます。 自由形式のプロトタイプ定義を参照してください。 |
| DCL-S | 自由形式の独立フィールド定義を開始します。 自由形式の独立フィールド定義を参照してください。 |
| DCL-PROC | 自由形式のプロシージャー定義を開始します。 自由形式のプロシージャー・ステートメントを参照してください。 |
| END-PROC | 自由形式のプロシージャー定義を終了します。 自由形式のプロシージャー・ステートメントを参照してください。 |

| 要素 | 説明 |
|---|---|
| CCSIDCVT(*EXCP | *LIST) | 異なる CCSID を含むデータ間の変換をコンパイラーがどのように扱うかを制御できるようにします。
CCSIDCVT(*EXCP | *LIST)を参照してください。 |
| VALIDATE(*NODATETIME) | 日付データ、時刻データ、およびタイム・スタンプ・データを使用前に検証する必要があるかどうかを指定します。
VALIDATE(*NODATETIME)を参照してください。 |

| 要素 | 説明 |
|---|---|
| DATA(*{NO}CVT) | 英数字データおよびグラフィック・データに対してジョブ CCSID からまたはジョブ CCSID への CCSID 変換
をデータベースが実行するようにファイルがオープンされるかどうかを制御します。 DATA(*CVT | *NOCVT)を参照してください。 |
| HANDLER(ハンドラー {:通信域}) | ファイルがオープン・アクセス・ファイルであることを指定します。 HANDLER(プログラムまたはプロシージャー { : 通信域)})を参照してください。 |
| DISK {(*EXT | レコード長)} | 自由形式ファイル定義の装置タイプを指定するための装置キーワード。
ファイル装置を参照してください。 |
| PRINTER {(*EXT | レコード長)} | |
| SEQ {(*EXT | レコード長)} | |
| SPECIAL {(*EXT | レコード長)} | |
| WORKSTN {(*EXT | レコード長)} | |
| USAGE(*INPUT *OUTPUT *UPDATE *DELETE) | 自由形式ファイル定義において、ファイルの使用法を
指定します。 USAGE(*INPUT *OUTPUT *UPDATE *DELETE)を参照してください。 |
| KEYED {(*CHAR : キー長)} | 自由形式ファイル定義において、ファイルがキー付きであることを
指定します。 KEYED{(*CHAR : キー長)}を参照してください。 |


| 要素 | 説明 |
|---|---|
| CHAR(長さ) | 固定長英数字データ・タイプ CHAR(長さ)を参照してください。 |
| VARCHAR(長さ {:接頭部サイズ}) | 可変長英数字データ・タイプ VARCHAR(長さ {:2 | 4})を参照してください。 |
| GRAPH(長さ) | 固定長グラフィック・データ・タイプ GRAPH(長さ)を参照してください。 |
| VARGRAPH(長さ {:接頭部サイズ}) | 可変長グラフィック・データ・タイプ VARGRAPH(長さ {:2 | 4})を参照してください。 |
| UCS2(長さ) | 固定長 UCS-2 データ・タイプ UCS2(長さ)を参照してください。 |
| VARUCS2(長さ {:接頭部サイズ}) | 可変長 UCS-2 データ・タイプ VARUCS2(長さ {:2 | 4})を参照してください。 |
| IND | 標識データ・タイプ INDを参照してください。 |
| INT(桁数) | 整数データ・タイプ INT(桁数)を参照してください。 |
| UNS(桁数) | 符号なし整数データ・タイプ UNS(桁数)を参照してください。 |
| PACKED(桁数 {:小数点以下の桁数}) | パック 10 進数データ・タイプ PACKED(桁数 {: 小数点以下の桁数})を参照してください。 |
| ZONED(桁数 {:小数点以下の桁数}) | ゾーン 10 進数データ・タイプ ZONED(桁数 {: 小数点以下の桁数})を参照してください。 |
| BINDEC(桁数 {:小数点以下の桁数}) | 2 進 10 進数データ・タイプ BINDEC(桁数 {: 小数点以下の桁数})を参照してください。 |
| FLOAT(サイズ) | 浮動小数点データ・タイプ FLOAT(バイト数)を参照してください。 |
| DATE {(形式)} | 日付データ・タイプ DATE{(形式 {区切り記号 }) }を参照してください。 |
| TIME {(形式)} | 時刻データ・タイプ TIME{(形式 {区切り記号 }) }を参照してください。 |
| TIMESTAMP {(秒の小数部の桁数)} | タイム・スタンプ・データ・タイプ TIMESTAMP { (秒の小数部の桁数) }を参照してください。 |
| POINTER {(*PROC)} | ポインター・データ・タイプ。任意指定のパラメーター *PROC は、
プロシージャー・ポインターであることを示します。 POINTER{(*PROC)}を参照してください。 |
| OBJECT {(*JAVA : クラス名)} | オブジェクト・データ・タイプ。Java™ コンストラクターの戻りタイプを定義している場合、パラメーターは任意指定です。 OBJECT{(*JAVA:クラス名)}を参照してください。 |

