KIN03EXP: SELECT INTO → CURSOR(DECLARE/OPEN/FETCH/CLOSE) pattern; SUB01DAT: COPY ZANDATAC; 基本設計書A: KIN08DBU/KIN09CSV specs updated; 品質管理: coverage stats, keyword docs, test criteria

This commit is contained in:
qiuqiuqiu
2026-06-30 21:22:15 +08:00
parent a110bccdaf
commit baa5be54d2
40 changed files with 3382 additions and 350 deletions
@@ -0,0 +1,1426 @@
# COBOL言語解説書
## ドキュメント情報
- **タイトル**: Enterprise COBOL for z/OS 6.5 Language Reference
- **出版番号**: SC27-8713-04
- **ページ数**: 916
- **日本語訳題**: COBOL言語解説書
- **ベース**: IBM Enterprise COBOL for z/OS V6.5 (プログラム番号 5655-EC6)
---
# 第1部: COBOL言語構造
## 1.1 文字セットとコードページ
### 基本COBOL文字セット
COBOLの基本文字セットは、ラテンアルファベットの大文字・小文字、数字、および特殊文字で構成される。
| 文字 | 意味 | 使用例 |
|------|------|--------|
| スペース | 区切り文字 | `01 WS-A PIC X(10).` |
| `+` | 算術演算子、編集文字 | `COMPUTE WS-A = B + C.` |
| `-`(ハイフン) | 算術演算子、編集文字、継続文字、COBOL語要素 | `COMPUTE WS-A = B - C.` |
| `*`(アスタリスク) | 算術演算子、編集文字、注釈文字 | `* THIS IS COMMENT` |
| `/`(スラッシュ) | 算術演算子、編集文字、継続文字 | `PIC 99/99/99.` |
| `=` | 代入文字、関係文字 | `COMPUTE A = B.` |
| `$` | 通貨記号(編集文字) | `PIC $$99.` |
| `,`(カンマ) | 編集文字、区切り文字 | `PIC 99,999.` |
| `;`(セミコロン) | 区切り文字 | `MOVE 10 TO A; B.` |
| `:`(コロン) | 関係文字、修飾演算子 | `MOVE VAR(1:10) TO V.` |
| `.`(ピリオド) | 小数点、区切り文字 | `MOVE 10 TO A, B.` |
| `"`(引用符) | 英数字リテラルの区切り | `VALUE "HELLO".` |
| `'`(アポストロフィ) | 英数字リテラルの区切り | `VALUE 'HELLO'.` |
| `(` `)` | 括弧(区切り文字) | `IF (A = 10) AND (B = 5)` |
| `>` `<` | 関係文字 | `IF A > 10` |
| `_`(アンダースコア) | ユーザ定義語要素 | `01 WS_VAR PIC X(10).` |
| `A-Z` / `a-z` | アルファベット(英字) | |
| `0-9` | 数字 | |
### コードページ
コードページ(コード化文字セット)とは、各文字に数値位置(コードポイント)を割り当てた符号化表現のこと。IBMの各コードページはコードページ名(例:IBM-1252)とCCSID(例:1252)で識別される。
**Enterprise COBOLのコードページ関連機能**:
- `CODEPAGE`コンパイラオプションで使用するコードページを指定
- デフォルトのコードページは IBM-1140CCSID 1140
- ナショナルリテラルおよびUSAGE NATIONALのデータは UTF-16BECCSID 1200)で符号化
- UTF-8リテラルおよびUSAGE UTF-8のデータは UTF-8CCSID 1208)で符号化
**文字符号化単位(エンコーディングユニット)**:
| USAGE / カテゴリ | エンコーディング単位 |
|-----------------|---------------------|
| DISPLAY(英数字) | 1バイト |
| DISPLAY-1DBCS | 2バイト |
| NATIONAL | 2バイト |
| UTF-8 | 1バイト |
**ランタイムコードページの種類**:
- シングルバイトEBCDIC
- EBCDIC DBCSShift-Out/Shift-Inで区切られた2バイト文字)
- Unicode UTF-16
- Unicode UTF-8
---
## 1.2 文字列(COBOL語とリテラル)
文字列(character-string)とは、COBOL語、リテラル、PICTURE文字列、または注釈項目を形成する連続した文字のこと。文字列は区切り文字(separator)によって区切られる。
### COBOL予約語
予約語はCOBOLソースユニット内で事前定義された意味を持つ文字列。6つのタイプがある:
1. **キーワード** — 特定の句、項目、文で必須の語
2. **オプション語** — 可読性向上のための省略可能な語
3. **FIGURATIVE CONSTANT figurative constants** — ZERO, SPACE等
4. **特殊文字語** — 算術演算子(+ - / * **)、関係演算子(< > = <= >=)、浮動注釈指示子(\*>)、疑似テキスト区切り(==)、コンパイラ指示子指示記号(>>)
5. **特殊オブジェクト識別子** — SELF, SUPER
6. **特殊レジスタ** — ADDRESS OF, RETURN-CODE等
### ユーザ定義語
ユーザが指定するCOBOL語。最大30バイト。以下の文字を使用可能:
- ラテン大文字 AZ
- ラテン小文字 az
- 数字 09
- ハイフン(-):先頭・末尾不可
- アンダースコア(_):先頭不可
**ユーザ定義語の種類とDBCS許容**:
| 種類 | DBCS許容 |
|------|----------|
| Alphabet-name(アルファベット名) | 可 |
| Class-name(クラス名) | 可 |
| Condition-name(条件名) | 可 |
| Data-name(データ名) | 可 |
| File-name(ファイル名) | 可 |
| Function-name(関数名) | 不可 |
| Index-name(インデックス名) | 可 |
| Level-number(レベル番号01-49, 66, 77, 88 | 不可 |
| Library-name(ライブラリ名) | 不可 |
| Mnemonic-name(ニモニック名) | 可 |
| Paragraph-name(段落名) | 可 |
| Program-name(プログラム名) | 不可 |
| Record-name(レコード名) | 可 |
| Section-name(節名) | 可 |
| Symbolic-character(記号文字) | 可 |
| Text-name(テキスト名) | 不可 |
| Type-name(型名) | 可 |
| XML-schema-nameXMLスキーマ名) | 可 |
### システム名
システムに対して特定の意味を持つ文字列。3タイプ:
- Computer-name(計算機名)
- Language-name(言語名)
- Implementor-name(実装者名):Environment-name, External-class-name, External-fileid, Assignment-name
### FIGURATIVE CONSTANTS figurative定数)
| 定数 | 意味 |
|------|------|
| ZERO, ZEROS, ZEROES | 数値0、または文字'0'の1回以上の出現 |
| SPACE, SPACES | 1つ以上のブランク(空白) |
| HIGH-VALUE, HIGH-VALUES | 使用中の照合順序で最上位の文字 |
| LOW-VALUE, LOW-VALUES | 使用中の照合順序で最下位の文字 |
| QUOTE, QUOTES | 引用符文字またはアポストロフィ文字 |
| ALL literal | リテラルの文字列を1回以上繰り返したもの |
| NULL, NULLS | POINTER/PROCEDURE-POINTER等の無効アドレスを示す値 |
| symbolic-character | SYMBOLIC CHARACTERS句で定義された文字 |
### 特殊レジスタ一覧
特殊レジスタは、コンパイラが生成するストレージ領域を名前で参照するための予約語。
| 特殊レジスタ | 暗黙定義 | 用途 |
|-------------|----------|------|
| ADDRESS OF | USAGE POINTER | LINKAGE/LOCAL/WORKING-STORAGE項目のアドレス参照 |
| DEBUG-ITEM | 01グループ(6サブフィールド) | デバッグ宣言手続きへの情報提供 |
| IGY-JAVAIOP-CALL-EXCEPTION | PIC 9(9)/9(18) COMP-5 | Java静的メソッド呼出時の例外オブジェクト参照 |
| JNIENVPTR | USAGE POINTER | JNI環境ポインタ参照 |
| JSON-CODE | PIC S9(9) BINARY | JSON GENERATE/PARSEの成功/例外コード |
| JSON-STATUS | PIC S9(9) BINARY | JSON PARSEの非例外状態コード |
| LENGTH OF | PIC 9(9)/9(18) BINARY | データ項目の現在バイト長 |
| LINAGE-COUNTER | 可変(LINAGE句依存) | 現在ページ内の行番号 |
| RETURN-CODE | PIC S9(4) BINARY GLOBAL | 呼出元へのリターンコード |
| SHIFT-OUT / SHIFT-IN | PIC X(1) DISPLAY | EBCDICシフトアウト/シフトイン制御文字 |
| SORT-CONTROL | PIC X(8) DISPLAY | ソート制御文のDD名 |
| SORT-CORE-SIZE | PIC S9(8) BINARY | ソートユーティリティが使用可能なストレージ量 |
| SORT-FILE-SIZE | PIC S9(8) BINARY | ソート入力ファイルの推定レコード数 |
| SORT-MESSAGE | PIC X(8) DISPLAY | ソートメッセージ出力先DD名 |
| SORT-MODE-SIZE | PIC S9(5) BINARY | 可変長レコードの最頻長 |
| SORT-RETURN | PIC S9(4) BINARY | ソート/マージ完了コード(0=成功, 16=失敗) |
| TALLY | PIC 9(5) BINARY GLOBAL | 計数用(参照・変更可能) |
| WHEN-COMPILED | PIC X(16) DISPLAY | コンパイル開始日時(MM/DD/YYhh.mm.ss |
| XML-CODE | PIC S9(9) BINARY | XML GENERATE/PARSEのステータスコード |
| XML-EVENT | PIC X(30) DISPLAY | XMLパースイベント名 |
| XML-INFORMATION | PIC S9(9) BINARY | XMLイベントの追加情報 |
| XML-NAMESPACE / XML-NNAMESPACE | 英数字/ナショナル | XML名前空間識別子 |
| XML-NAMESPACE-PREFIX / XML-NNAMESPACE-PREFIX | 英数字/ナショナル | XML名前空間プレフィックス |
| XML-NTEXT | ナショナル | XML文書断片(NATIONAL |
| XML-TEXT | 英数字(可変長) | XML文書断片(DISPLAY |
### リテラル
リテラルは、その構成文字またはFIGURATIVE CONSTANTの使用によって値が指定される文字列。
**英数字リテラル(Alphanumeric Literals**:
- 基本形式: `"文字列"` または `'文字列'`
- 最大長: 160バイト、最小長: 1バイト
- 16進表記: `X"hex"` または `X'hex'`
- NULL終端: `Z"文字列"` または `Z'文字列'`
- DBCS文字を含む英数字リテラルは継続不可
**DBCSリテラル**:
- 形式: `G"<DBCS文字>"` または `G'<DBCS文字>'`
- 最大長: 28文字
- 継続不可
**UTF-8リテラル**:
- 基本形式: `U"文字データ"` または `U'文字データ'`
- Unicodeエスケープシーケンス対応: `\uhhhh` (BMP), `\U00hhhhh` (追加面)
- 16進表記: `UX"hex"` または `UX'hex'`
**数値リテラル**:
- 数字0-9、符号(+/-)、小数点で構成
- 整数: 118桁(ARITH(COMPAT)時)または131桁(ARITH(EXTEND)時)
- 浮動小数点: 仮数部に小数点必須、指数部はE+/-nn
**ナショナルリテラル**:
- NSYMBOL(NATIONAL)時: `N"文字データ"` または `N'文字データ'`
- 最大長: 80文字位置
- 16進表記: `NX"hex"` または `NX'hex'`
- UTF-16(ビッグエンディアン)に自動変換
---
## 1.3 区切り文字(Separators
| 区切り文字 | 意味 |
|-----------|------|
| スペース(b) | 語の区切り |
| `,b`(カンマ+スペース) | 区切りカンマ |
| `.b`(ピリオド+スペース) | 区切りピリオド(文の終端) |
| `;b`(セミコロン+スペース) | 区切りセミコロン |
| `:` | コロン |
| `::` | 修飾演算子 |
| `(` `)` | 括弧 |
| `"..."` | 引用符(英数字リテラル区切り) |
| `'...'` | アポストロフィ(英数字リテラル区切り) |
| `==...==` | 疑似テキスト区切り |
| `U"` / `U'` | UTF-8リテラル開始区切り |
| `UX"` / `UX'` | UTF-8 16進リテラル開始区切り |
| `X"` / `X'` | 英数字16進リテラル開始区切り |
| `Z"` / `Z'` | NULL終端英数字リテラル開始区切り |
| `N"` / `N'` | ナショナル/DBCSリテラル開始区切り |
| `NX"` / `NX'` | ナショナル16進リテラル開始区切り |
| `G"` / `G'` | DBCSリテラル開始区切り |
---
## 1.4 参照形式(Reference Format
COBOLソーステキストは72桁の行内で以下の領域に分けられる:
| 領域 | 桁 | 内容 |
|------|-----|------|
| Sequence number area | 16 | 行番号(任意) |
| Indicator area | 7 | 指示子 |
| Area A | 811 | 特定の要素の開始位置 |
| Area B | 1272 | エントリ、文、句など |
**Area Aに記述するもの**:
- 区分ヘッダ(IDENTIFICATION/ENVIRONMENT/DATA/PROCEDURE DIVISION.
- 節ヘッダ
- 段落ヘッダ、段落名
- レベル指示子(FD, SD)、レベル番号01、77
- DECLARATIVES / END DECLARATIVES
- プログラム/クラス/メソッド終了マーカ
**Area Bに記述するもの**:
- エントリ、文、句
- 継続行
**指示子領域(Column 7)の用途**:
- `-`(ハイフン): 継続行
- `*`(アスタリスク): 注釈行
- `/`(スラッシュ): 改ページ+注釈行
- `D` / `d`: デバッグ行
---
# 第2部: COBOLプログラム構造
## 2.1 4つのDIVISION
COBOLソースプログラムは以下の4つの区分(division)から構成される:
### IDENTIFICATION DIVISION(識別区分)
プログラムの識別情報を定義する必須区分。
**主要な段落**:
- `PROGRAM-ID. program-name.` — プログラム名(必須)
- `CLASS-ID. class-name INHERITS class-name.` — クラス定義
- `FUNCTION-ID. function-name.` — ユーザ定義関数
- `METHOD-ID. "method-name".` — メソッド定義
### ENVIRONMENT DIVISION(環境区分)
プログラムの実行環境に依存する側面を記述する。
**CONFIGURATION SECTION**:
- SOURCE-COMPUTET. source-computer-name
- OBJECT-COMPUTER. object-computer-name
- SPECIAL-NAMES.(特殊名)
- REPOSITORY.(リポジトリ)
**INPUT-OUTPUT SECTION**:
- FILE-CONTROL.(ファイル制御)
- I-O-CONTROL.(入出力制御)
### DATA DIVISION(データ区分)
プログラムで処理されるすべてのデータを構造化して記述する。
**FILE SECTION**(ファイル節) — データファイルの構造を定義
**WORKING-STORAGE SECTION**(作業格納節) — 内部データ
**LOCAL-STORAGE SECTION**(局所格納節) — 呼出毎に再割当てされるデータ
**LINKAGE SECTION**(連絡節) — 他プログラムから受け渡されるデータ
### PROCEDURE DIVISION(手続き区分)
実行可能な処理を記述する。
---
## 2.2 ネストプログラム
COBOLプログラムは他のCOBOLプログラムを内部に含むことができる。これらを含まれるプログラムをネストプログラムと呼ぶ。
- 直接含まれる(directly contained: プログラムBがプログラムA内に直接ある場合
- 間接的に含まれる(indirectly contained: プログラムBがプログラムA内の別のプログラムCに含まれる場合
- 兄弟プログラム(sibling): 同じプログラムに直接含まれるプログラム同士
- COMMON属性: ネストプログラムで指定でき、それを含むプログラムとその兄弟から参照可能
---
## 2.3 クラス定義/メソッド定義/ユーザ定義関数
### クラス定義
オブジェクト指向COBOLのための構造。Javaとの相互運用を目的とする。
```
IDENTIFICATION DIVISION.
CLASS-ID. class-name INHERITS superclass.
ENVIRONMENT DIVISION.
...CONFIGURATION SECTIONのみ)
FACTORY.(ファクトリ定義:静的メソッド+静的データ)
OBJECT.(オブジェクト定義:インスタンスメソッド+インスタンスデータ)
END CLASS class-name.
```
### メソッド定義
クラス内のメソッドは独立した`METHOD-ID`で識別される。`GOBACK`で終了。
### ユーザ定義関数
`FUNCTION-ID`で定義。`RETURNING`句で戻り値を指定。
---
# 第3部: ENVIRONMENT DIVISION詳細
## 3.1 CONFIGURATION SECTION(構成節)
### SOURCE-COMPUTER段落
```
SOURCE-COMPUTER. computer-name WITH DEBUGGING MODE.
```
### OBJECT-COMPUTER段落
```
OBJECT-COMPUTER. computer-name
MEMORY SIZE integer WORDS/CHARACTERS/MODULES
PROGRAM COLLATING SEQUENCE IS alphabet-name
SEGMENT-LIMIT IS priority-number.
```
### SPECIAL-NAMES段落
```
SPECIAL-NAMES.
implementor-name IS mnemonic-name
alphabet-name IS ...
CLASS class-name IS ...
CURRENCY SIGN IS literal
DECIMAL-POINT IS COMMA
SYMBOLIC CHARACTERS ...
XML-SCHEMA ...
```
**主な句**:
| 句 | 機能 |
|----|------|
| ALPHABET句 | 文字セット/照合順序の定義(EBCDIC, ASCII, STANDARD-1/2, ユーザ定義) |
| CLASS句 | 文字の分類定義(例:CLASS VALID-CHAR IS 'A' THRU 'Z' |
| CURRENCY SIGN句 | 通貨記号の変更 |
| DECIMAL-POINT IS COMMA | ピリオドとカンマの機能交換 |
| SYMBOLIC CHARACTERS句 | ユーザ定義FIGURATIVE CONSTANTの作成 |
| XML-SCHEMA句 | XMLスキーマファイルの指定 |
### REPOSITORY段落
クラス名とその外部クラス名の対応付け、ユーザ定義関数のプロトタイプ参照を行う。
```
REPOSITORY.
CLASS class-name IS external-class-name
FUNCTION function-name
FUNCTION ALL INTRINSIC.
```
---
## 3.2 INPUT-OUTPUT SECTION(入出力節)
### FILE-CONTROL段落
```
FILE-CONTROL.
SELECT file-name ASSIGN TO assignment-name
ORGANIZATION IS SEQUENTIAL/INDEXED/RELATIVE
ACCESS MODE IS SEQUENTIAL/RANDOM/DYNAMIC
RECORD KEY IS data-name
ALTERNATE RECORD KEY IS data-name
RELATIVE KEY IS data-name
FILE STATUS IS data-name
RESERVE integer AREAS
PADDING CHARACTER IS data-name
RECORD DELIMITER IS STANDARD-1.
```
| 句 | 機能 |
|----|------|
| SELECT / ASSIGN | ファイルと外部名の関連付け |
| ORGANIZATION | ファイル編成(SEQUENTIAL/INDEXED/RELATIVE |
| ACCESS MODE | アクセスモード(SEQUENTIAL/RANDOM/DYNAMIC |
| RECORD KEY | 索引ファイルの主レコードキー |
| ALTERNATE RECORD KEY | 代替レコードキー |
| RELATIVE KEY | 相対ファイルのキー |
| FILE STATUS | ファイルステータスを受け取るデータ項目 |
| RESERVE | バッファ領域数 |
### I-O-CONTROL段落
```
I-O-CONTROL.
RERUN ON assignment-name EVERY integer RECORDS
SAME AREA FOR file-name
SAME RECORD AREA FOR file-name
SAME SORT AREA FOR file-name
MULTIPLE FILE TAPE CONTAINS file-name
APPLY WRITE-ONLY ON file-name.
```
---
# 第4部: DATA DIVISION詳細
## 4.1 ファイル記述(FD
```
FD file-name
BLOCK CONTAINS integer-1 TO integer-2 RECORDS/CHARACTERS
RECORD CONTAINS integer-1 TO integer-2 CHARACTERS
LABEL RECORDS ARE STANDARD/OMITTED
VALUE OF data-name IS literal
DATA RECORDS ARE record-name
LINAGE IS data-name/integer LINES
WITH FOOTING AT data-name/integer
LINES AT TOP data-name/integer
LINES AT BOTTOM data-name/integer
RECORDING MODE IS F/V/U/S
CODE-SET IS alphabet-name
EXTERNAL / GLOBAL.
```
| 句 | 機能 |
|----|------|
| BLOCK CONTAINS | 物理ブロックサイズ |
| RECORD CONTAINS | 論理レコードサイズ |
| LABEL RECORDS | ラベル処理(STANDARD/OMITTED |
| VALUE OF | ラベル内の識別情報 |
| LINAGE | ページ行数制御(帳票出力用) |
| CODE-SET | コードページ変換の指定 |
**LINAGE句**:
- LINAGE-COUNTER特殊レジスタが自動生成される
- `WRITE`文実行時に自動更新
- 初期値は1
---
## 4.2 データ記述項目
### レベルの概念
| レベル番号 | 用途 |
|-----------|------|
| 01 | レコード自体(Area Aに記述) |
| 02~49 | グループ項目、基本項目 |
| 66 | RENAMES句用 |
| 77 | 独立項目(WORKING-STORAGE等、Area Aに記述) |
| 88 | 条件名(VALUE句と共に使用) |
### PICTURE句
PICTURE文字列でデータ項目の特性と編集要件を指定する。
**PICTURE記号一覧**:
| 記号 | 意味 | サイズ算定 |
|------|------|-----------|
| A | 英字またはスペースのみ | 1文字位置 |
| B | スペース挿入 | 1文字位置 |
| E | 外部浮動小数点の指数開始 | 1文字位置 |
| G | DBCS文字位置 | 1文字位置 |
| N | DBCS/ナショナル文字位置 | 1文字位置 |
| P | 仮定小数点スケーリング位置 | カウントされない |
| S | 符号の存在 | カウントされない(SEPARATE時は1) |
| U | UTF-8文字位置 | 1文字位置 |
| V | 仮定小数点の位置 | カウントされない |
| X | 任意の英数字文字 | 1文字位置 |
| Z | 先頭ゼロ置換(スペース) | 1文字位置 |
| 9 | 数字 | 1桁 |
| 0 | ゼロ挿入 | 1文字位置 |
| / | スラッシュ挿入 | 1文字位置 |
| , | カンマ挿入 | 1文字位置 |
| . | 実小数点(編集) | 1文字位置 |
| + / - | 編集符号制御 | 1文字位置 |
| CR / DB | 編集符号制御 | 2文字位置 |
| * | チェックプロテクト | 1文字位置 |
| cs | 通貨記号 | 1+文字位置 |
**データカテゴリ**:
| カテゴリ | PICTURE記号 |
|---------|-------------|
| Alphabetic | Aのみ |
| Alphanumeric | X、またはA/X/9の組合せ |
| Alphanumeric-edited | A X 9 B 0 /(少なくとも1つのA/Xと1つのB/0// |
| DBCS | G、G B、NNSYMBOL(DBCS)時) |
| External floating-point | +9.9E+99形式 |
| National | NNSYMBOL(NATIONAL)時) |
| National-edited | N B 0 / |
| Numeric | 9 S V P |
| Numeric-edited | 数値編集記号 |
| UTF-8 | U |
**編集の種類**:
- 単純挿入編集: B, 0, /
- 特殊挿入編集: .(実小数点)
- 固定挿入編集: +, -, CR, DB, cs(通貨記号)
- 浮動挿入編集: +, -, cs(複数回指定)
- ゼロ抑制/置換編集: Z, *
---
### OCCURS句(表定義)
固定長表:
```
05 item OCCURS integer TIMES
ASCENDING/DESCENDING KEY IS data-name
INDEXED BY index-name
PIC X(10).
```
可変長表(ODO: OCCURS DEPENDING ON:
```
05 item OCCURS integer-1 TO integer-2 TIMES
DEPENDING ON data-name
PIC X(10).
```
無制限表(UNBOUNDED:
```
05 item OCCURS 1 TO UNBOUNDED TIMES
DEPENDING ON data-name
PIC X(10).
```
### REDEFINES句
同一ストレージ領域の再定義。レベル番号が同じでなければならない。
```
01 WS-EMPLOYEE.
05 WS-EMP-NAME PIC X(30).
05 WS-EMP-SALARY PIC 9(5)V99.
01 WS-EMP-ALT REDEFINES WS-EMPLOYEE.
05 WS-EMP-CODE PIC X(10).
05 WS-EMP-DEPT PIC X(25).
```
### RENAMES句(レベル66
既存データ項目の再グループ化。レベル66で指定。
```
66 WS-RENAME-EMP RENAMES WS-FIRST-NAME THRU WS-LAST-NAME.
```
### USAGE句
データ項目の内部表現を指定。
| USAEGE句 | 説明 |
|---------|------|
| DISPLAY | ディスプレイ形式(標準) |
| DISPLAY-1 | DBCSデータ |
| COMP / COMP-4 / BINARY | 2進形式 |
| COMP-1 | 内部浮動小数点(短精度) |
| COMP-2 | 内部浮動小数点(長精度) |
| COMP-3 | 内部10進形式(パック10進) |
| INDEX | インデックスデータ項目 |
| POINTER | アドレスポインタ |
| POINTER-32 | 32ビットアドレスポインタ |
| PROCEDURE-POINTER | 手続きポインタ |
| FUNCTION-POINTER | 関数ポインタ |
| OBJECT REFERENCE | オブジェクト参照 |
| NATIONAL | ナショナル文字(UTF-16 |
| UTF-8 | UTF-8文字 |
| NATIVE | ネイティブ2進表現 |
### VALUE句
データ項目の初期値を指定。
```
01 WS-COUNT PIC 9(4) VALUE 0.
88 WS-ZERO VALUE 0.
88 WS-POSITIVE VALUE 1 THRU 9999.
```
### その他の句
| 句 | 機能 |
|----|------|
| BLANK WHEN ZERO | 値がゼロのとき項目を空白にする |
| JUSTIFIED RIGHT | 右詰め指定 |
| SYNCHRONIZED | 自然境界への位置合わせ(SYNC) |
| EXTERNAL | 実行単位全体で共有される外部データ |
| GLOBAL | ネストプログラムから参照可能な大域データ |
| SIGN IS LEADING/TRALLING SEPARATE | 符号の表現方法 |
| GROUP-USAGE NATIONAL/UTF-8 | グループ全体の使用法 |
| TYPEDEF / TYPE | ユーザ定義型 |
| DYNAMIC LENGTH | 動的長さ基本項目 |
| VOLATILE | 揮発性データの指定 |
---
# 第5部: PROCEDURE DIVISION詳細
## 5.1 手続き部構造
### PROCEDURE DIVISIONヘッダ
```
PROCEDURE DIVISION USING data-name-1 ...
RETURNING data-name.
```
- USING句: LINKAGE SECTIONの項目を引数として受け取る
- RETURNING句: 戻り値を指定
### 宣言部(DECLARATIVES
例外処理やデバッグ処理を記述する特殊な手続き領域。
```
DECLARATIVES.
section-name SECTION. USE AFTER EXCEPTION/ERROR ON file-name.
...
END DECLARATIVES.
```
### 算術式
算術演算子: `+`(加算), `-`(減算), `*`(乗算), `/`(除算), `**`(べき乗)
演算優先順位: `**``*` / `/``+` / `-`
### 条件式
**関係条件**:
```
operand-1 IS [NOT] GREATER THAN / LESS THAN / EQUAL TO operand-2
operand-1 > / < / = / >= / <= operand-2
```
**クラス条件**:
```
identifier IS [NOT] NUMERIC / ALPHABETIC / ALPHABETIC-LOWER /
ALPHABETIC-UPPER / DBCS / KANJI / class-name
```
**条件名条件**:
```
condition-name 88レベルで定義された条件名)
```
**符号条件**:
```
operand IS [NOT] POSITIVE / NEGATIVE / ZERO
```
**スイッチ状態条件**:
```
condition-name SPECIAL-NAMESで定義されたUPSIスイッチ)
```
**省略引数条件**:
```
data-name IS [NOT] OMITTED
```
**複合条件**:
```
condition-1 AND/OR condition-2
NOT condition
```
---
## 5.2 手続き文一覧
### ACCEPT文
システム日付・時刻・ユーザ入力の受取り。
```
ACCEPT identifier FROM DATE/DAY/TIME/DAY-OF-WEEK/
DATE YYYYMMDD/DAY YYYYDDD
ACCEPT identifier SYSINからの入力)
```
- DATE: PIC 9(6) — YYMMDD
- DATE YYYYMMDD: PIC 9(8) — YYYYMMDD
- DAY: PIC 9(5) — YYDDD
- DAY YYYYDDD: PIC 9(7) — YYYYDDD
- DAY-OF-WEEK: PIC 9(1) — 1=月曜~7=日曜
- TIME: PIC 9(8) — HHMMSShh(時分秒ミリ秒)
### ADD文
加算。ROUNDED、SIZE ERROR、CORRESPONDING句をサポート。
```
ADD identifier/literal TO identifier [ROUNDED]
[ON SIZE ERROR imperative] [NOT ON SIZE ERROR imperative]
ADD identifier/literal GIVING identifier [ROUNDED]
ADD CORRESPONDING identifier-1 TO identifier-2
```
### CALL文
サブプログラム呼出。
```
CALL literal/identifier USING [BY REFERENCE/CONTENT/VALUE] data-name
RETURNING identifier
ON EXCEPTION imperative
NOT ON EXCEPTION imperative
```
- BY REFERENCE: アドレス渡し(デフォルト)
- BY CONTENT: 内容のコピーを渡す
- BY VALUE: 値を渡す
### CANCEL文
プログラムの解放。次回CALL時に初期状態で再ロードされる。
```
CANCEL program-name
```
### CLOSE文
ファイルのクローズ。
```
CLOSE file-name [WITH LOCK/NO REWIND/REEL/FOR REMOVAL]
```
### COMPUTE文
計算代入。複数の算術演算を組合せ可能。
```
COMPUTE identifier [ROUNDED] = arithmetic-expression
[ON SIZE ERROR imperative] [NOT ON SIZE ERROR imperative]
```
### CONTINUE文
無操作(no operation)文。
```
CONTINUE
```
### DELETE文
索引ファイルまたは相対ファイルからのレコード削除。
```
DELETE file-name RECORD
[INVALID KEY imperative] [NOT INVALID KEY imperative]
```
### DISPLAY文
オペランドの内容を出力装置へ転送。
```
DISPLAY identifier/literal
UPON mnemonic-name/environment-name
WITH NO ADVANCING
```
### DIVIDE文
除算。商と余りを計算。
```
DIVIDE identifier INTO identifier [ROUNDED]
[REMAINDER identifier]
DIVIDE identifier BY identifier GIVING identifier [ROUNDED]
[REMAINDER identifier]
```
### EVALUATE文
多分岐。COBOLのswitch/case相当。
```
EVALUATE subject ALSO subject
WHEN object ALSO object imperative
WHEN OTHER imperative
END-EVALUATE
```
### EXIT文
手続きの共通終了点。プログラム/メソッド/PARAGRAPH/SECTIONの終了。
```
EXIT PROGRAM (呼出元に復帰)
EXIT METHOD (メソッド終了)
EXIT PARAGRAPH (段落終了)
EXIT SECTION (節終了)
EXIT PERFORM [CYCLE] (インラインPERFORMからの脱出)
```
### GOBACK文
プログラム/メソッドの論理的終了。呼出元に復帰。
```
GOBACK
```
### GO TO文
制御の移動。
```
GO TO procedure-name (無条件)
GO TO procedure-name DEPENDING ON identifier (条件付)
```
### IF文
条件分岐。
```
IF condition THEN statement-1 ELSE statement-2 END-IF
```
### INITIALIZE文
データ項目のカテゴリ別初期化。
```
INITIALIZE identifier [WITH FILLER] [ALL]
[REPLACING category BY identifier/literal]
[THEN TO DEFAULT]
```
カテゴリ: ALPHABETIC, ALPHANUMERIC, NUMERIC, ALPHANUMERIC-EDITED,
NUMERIC-EDITED, DBCS, NATIONAL, NATIONAL-EDITED, UTF-8等
### INSPECT文
文字列の検査/置換/変換。
```
INSPECT identifier TALLYING count FOR CHARACTERS/ALL/LEADING/FIRST
identifier/literal [BEFORE/AFTER identifier/literal]
INSPECT identifier REPLACING CHARACTERS/ALL/LEADING/FIRST
identifier/literal BY identifier/literal
INSPECT identifier CONVERTING identifier TO identifier
```
### MERGE文
2つ以上のファイルのマージ。
```
MERGE file-name ON ASCENDING/DESCENDING KEY data-name
USING file-name-1 file-name-2
GIVING file-name-3
```
### MOVE文
代入。基本項目移動、グループ移動、編集をサポート。
```
MOVE identifier/literal TO identifier
MOVE CORRESPONDING identifier-1 TO identifier-2
```
### MULTIPLY文
乗算。
```
MULTIPLY identifier BY identifier [ROUNDED]
MULTIPLY identifier BY identifier GIVING identifier [ROUNDED]
```
### OPEN文
ファイルのオープン。
```
OPEN INPUT/OUTPUT/I-O/EXTEND file-name
```
### PERFORM文
繰り返し処理。
```
PERFORM procedure [THRU procedure] (基本)
PERFORM procedure integer TIMES (回数指定)
PERFORM procedure UNTIL condition (条件指定)
PERFORM procedure VARYING identifier FROM ... BY ... UNTIL ...
PERFORM inline-statement END-PERFORM (インライン)
```
### READ文
ファイルからの読込。
```
READ file-name [INTO identifier] [KEY IS data-name]
[AT END imperative] [INVALID KEY imperative]
[NOT AT END/INVALID KEY imperative]
```
### RELEASE文
SORT文へのレコード引き渡し。
```
RELEASE record-name FROM identifier
```
### RETURN文
SORT文からのレコード受取。
```
RETURN file-name INTO identifier
AT END imperative [NOT AT END imperative]
```
### REWRITE文
レコードの書換え。
```
REWRITE record-name [FROM identifier]
[INVALID KEY imperative] [NOT INVALID KEY imperative]
```
### SEARCH文
内部表の探索。
- **シリアルサーチ(SEARCH**: 逐次探索。INDEXED BY必須。
- **バイナリサーチ(SEARCH ALL**: 二分探索。ASCENDING/DESCENDING KEY必須。
```
SEARCH table-name [VARYING index-name]
AT END imperative
WHEN condition imperative
SEARCH ALL table-name
AT END imperative
WHEN KEY condition imperative
```
### SET文
インデックス、アドレス、条件名、ポインタの設定。
```
SET index-name UP BY/DOWN BY integer (索引値の増減)
SET index-name TO integer (索引値設定)
SET condition-name TO TRUE (条件名真設定)
SET address TO pointer (アドレス設定)
SET procedure-pointer TO entry (手続きポインタ設定)
SET object-reference TO object (オブジェクト参照設定)
```
### SORT文
ファイルの整列。
```
SORT file-name ON ASCENDING/DESCENDING KEY data-name
[WITH DUPLICATES IN ORDER]
INPUT PROCEDURE section [THRU section]
USING file-name
OUTPUT PROCEDURE section [THRU section]
GIVING file-name
```
### START文
VSAMファイルの開始位置指定。
```
START file-name KEY IS GREATER THAN/EQUAL TO/LESS THAN data-name
[INVALID KEY imperative] [NOT INVALID KEY imperative]
```
### STOP文
実行停止。
```
STOP RUN (プログラム終了、制御をOSに戻す)
STOP literal (一時停止、オペレータ介入待ち)
```
### STRING文
文字列の連結。
```
STRING identifier/literal DELIMITED BY identifier/literal/SIZE
INTO identifier
[WITH POINTER identifier]
[ON OVERFLOW imperative]
END-STRING
```
### SUBTRACT文
減算。
```
SUBTRACT identifier/literal FROM identifier [ROUNDED]
SUBTRACT identifier/literal FROM identifier GIVING identifier
SUBTRACT CORRESPONDING identifier-1 FROM identifier-2
```
### UNSTRING文
文字列の分解。
```
UNSTRING identifier
DELIMITED BY [ALL] identifier/literal [OR ...]
INTO identifier [DELIMITER IN identifier] [COUNT IN identifier]
[WITH POINTER identifier]
[TALLYING IN identifier]
[ON OVERFLOW imperative] [NOT ON OVERFLOW imperative]
END-UNSTRING
```
### WRITE文
ファイルへの書出し。
```
WRITE record-name [FROM identifier]
[AFTER/BEFORE ADVANCING PAGE/LINE identifier/literal]
[END-OF-PAGE imperative]
[INVALID KEY imperative] [NOT INVALID KEY imperative]
```
---
# 第6部: 組み込み関数
## 関数の呼出し形式
```
FUNCTION function-name ( argument ... )
```
## 関数一覧
| 関数名 | 型 | 説明 |
|--------|-----|------|
| ABS | 数値 | 絶対値 |
| ACOS | 数値 | 逆余弦(アークコサイン) |
| ANNUITY | 数値 | 年金係数 |
| ASIN | 数値 | 逆正弦(アークサイン) |
| ATAN | 数値 | 逆正接(アークタンジェント) |
| BIT-OF | 整数 | 2進数文字列表現 |
| BIT-TO-CHAR | 英数字 | 2進文字列を文字に変換 |
| BYTE-LENGTH | 整数 | バイト長 |
| CHAR | 英数字 | コードポイントから文字 |
| COMBINED-DATETIME | 整数 | 日時を結合した整数値 |
| CONTENT-OF | 英数字/ナショナル | ファイル内容の読取り |
| COS | 数値 | 余弦(コサイン) |
| CURRENT-DATE | 英数字 | 現在日時(YYYYMMDDhhmmssss+hhmm |
| DATE-OF-INTEGER | 整数 | 整数日付→YYYYMMDD変換 |
| DATE-TO-YYYYMMDD | 整数 | 2桁年→4桁年変換 |
| DAY-OF-INTEGER | 整数 | 整数日付→YYYYDDD変換 |
| DAY-TO-YYYYDDD | 整数 | 2桁年→4桁年(ユリウス日)変換 |
| DISPLAY-OF | 英数字 | ナショナル/UTF-8→指定コードページ変換 |
| E | 数値 | 自然対数の底(約2.71828) |
| EXP | 数値 | eのべき乗 |
| EXP10 | 数値 | 10のべき乗 |
| FACTORIAL | 整数 | 階乗 |
| FORMATTED-CURRENT-DATE | 英数字/ナショナル/UTF-8 | 書式指定現在日時 |
| FORMATTED-DATE | 英数字/ナショナル/UTF-8 | 書式指定日付変換 |
| FORMATTED-DATETIME | 英数字/ナショナル/UTF-8 | 書式指定日時変換 |
| FORMATTED-TIME | 英数字/ナショナル/UTF-8 | 書式指定時刻変換 |
| HEX-OF | 英数字 | 16進文字列表現 |
| HEX-TO-CHAR | 英数字 | 16進文字列→バイト変換 |
| INTEGER | 整数 | 切捨て整数化 |
| INTEGER-OF-DATE | 整数 | YYYYMMDD→整数日付変換 |
| INTEGER-OF-DAY | 整数 | YYYYDDD→整数日付変換 |
| INTEGER-OF-FORMATTED-DATE | 整数 | 書式指定日付→整数日付変換 |
| INTEGER-PART | 整数 | 整数部 |
| LENGTH | 整数 | 文字位置長(キャラクタ長) |
| LOG | 数値 | 自然対数 |
| LOG10 | 数値 | 常用対数 |
| LOWER-CASE | 英数字 | 英字小文字変換 |
| MAX | 可変 | 最大値 |
| MEAN | 数値 | 平均値 |
| MEDIAN | 数値 | 中央値 |
| MIDRANGE | 数値 | ミッドレンジ |
| MIN | 可変 | 最小値 |
| MOD | 整数 | 剰余(モジュロ) |
| NATIONAL-OF | ナショナル | 英数字→ナショナル変換 |
| NUMVAL | 数値 | 英数字→数値変換 |
| NUMVAL-C | 数値 | 通貨記号付き文字列→数値変換 |
| NUMVAL-F | 数値 | 浮動小数点文字列→数値変換 |
| ORD | 整数 | 文字の序数位置 |
| ORD-MAX | 整数 | 最大値の引数の序数 |
| ORD-MIN | 整数 | 最小値の引数の序数 |
| PI | 数値 | 円周率(約3.14159 |
| PRESENT-VALUE | 数値 | 現在価値 |
| RANDOM | 数値 | 乱数 |
| RANGE | 数値 | 範囲(最大値-最小値) |
| REM | 数値 | 剰余(REM = 被除数 - 除数 * 商) |
| REVERSE | 英数字/ナショナル | 文字列反転 |
| SECONDS-FROM-FORMATTED-TIME | 数値 | 書式指定時刻→秒数 |
| SECONDS-PAST-MIDNIGHT | 数値 | 現在時刻の正午からの経過秒数 |
| SIGN | 整数 | 符号(-1, 0, 1 |
| SIN | 数値 | 正弦(サイン) |
| SQRT | 数値 | 平方根 |
| STANDARD-DEVIATION | 数値 | 標準偏差 |
| SUM | 数値 | 合計 |
| TAN | 数値 | 正接(タンジェント) |
| TEST-DATE-YYYYMMDD | 整数 | YYYYMMDD日付の妥当性検証 |
| TEST-DAY-YYYYDDD | 整数 | YYYYDDD日付の妥当性検証 |
| TEST-FORMATTED-DATETIME | 整数 | 書式指定日時の妥当性検証 |
| TEST-NUMVAL | 整数 | 数値変換可能性の検証 |
| TEST-NUMVAL-C | 整数 | 通貨数値変換可能性の検証 |
| TEST-NUMVAL-F | 整数 | 浮動小数点変換可能性の検証 |
| TRIM | 英数字/ナショナル | 先頭/末尾スペース除去 |
| ULENGTH | 整数 | ナショナル文字の長さ(コードポイント単位) |
| UPOS | 整数 | ナショナル文字列内の部分文字位置 |
| UPPER-CASE | 英数字/ナショナル | 英字大文字変換 |
| USUBSTR | ナショナル | ナショナル部分文字列 |
| USUPPLEMENTARY | 整数 | 補助文字サロゲート有無判定 |
| UUID4 | 英数字 | UUID v4生成 |
| UVALID | 整数 | UTF-16文字列の妥当性検証 |
| UWIDTH | 整数 | UTF-16符号化単位数 |
| VARIANCE | 数値 | 分散 |
| WHEN-COMPILED | 英数字 | コンパイル日時(YYYYMMDDhhmmsshh+00 |
| YEAR-TO-YYYY | 整数 | 2桁年→4桁年変換 |
---
# 第7部: コンパイラ指示文とコンパイラ指令
## コンパイラ指示文(Compiler-Directing Statements
### BASIS文
別のソーステキストを現在のソースユニットに組み込む。
```
BASIS "basis-name"
```
### CBLPROCESS)文
コンパイラオプションをソース内で指定。
```
CBL option-name
PROCESS option-name
```
### *CBL*CONTROL)文
ソースコード一覧の制御。
```
*CBL SOURCE/NOSOURCE MAP/NOMAP LIST/NOLIST
```
### COPY文
COPYライブラリからソーステキストを組み込む。テキスト操作(置換)可能。
```
COPY text-name [IN library-name]
[REPLACING ==pseudo-text== BY ==pseudo-text== ...]
```
- 疑似テキストによる置換機能
- ライブラリ検索順序: 指定ライブラリ → SYSLIB
### DELETE文
ソース一覧からの行削除指示(コーディングシート用)。
```
DELETE line-number
```
### EJECT文
ソース一覧の改ページ。
```
EJECT
```
### ENTER文
他言語(COBOL以外)のプログラムの呼出し(非推奨)。
```
ENTER language-name routine-name
```
### INSERT文
ソース一覧への行挿入。
```
INSERT line-number
```
### READY/RESET TRACE文
トレースの開始・停止。
```
READY TRACE
RESET TRACE
```
### REPLACE文
ソーステキストの置換を指定。
```
REPLACE ==pseudo-text== BY ==pseudo-text== ...
REPLACE OFF
```
### SERVICE LABEL文
サービストレースのラベル設定。
```
SERVICE LABEL label-name
```
### SERVICE RELOAD文
サービスの再ロード。
```
SERVICE RELOAD
```
### SKIP文
ソース一覧での行送り。
```
SKIP1 / SKIP2 / SKIP3
```
### TITLE文
ソース一覧のタイトル指定。
```
TITLE "title-text"
```
### USE文
例外処理・デバッグ宣言。
```
USE AFTER EXCEPTION/ERROR ON file-name/INPUT/OUTPUT/I-O/EXTEND
USE FOR DEBUGGING ON procedure-name
```
---
## コンパイラ指令(Compiler Directives
コンパイラ指令は `>>` で始まり、Area Bに記述する。
### CALLINTERFACE
Javaとの相互運用のための呼出しインターフェース指定。
```
>>CALLINTERFACE DLL
```
### DATA
WORKING-STORAGEの割当て場所指定。
```
>>DATA 24 / 31
```
### 条件付きコンパイル(Conditional Compilation
`>>DEFINE`, `>>EVALUATE`, `>>IF` 等で条件付きコンパイルを実現。
```
>>DEFINE variable = value
>>IF condition
...source text...
>>ELSE
...source text...
>>END-IF
```
**事前定義コンパイル変数**:
- COBOL, COBOL2002, ENTERPRISE_COBOL, IBM_ARCHITECTURE,
OS_FLAVOR, LOCALE, LANGUAGE 等
### JAVA-CALLABLE
Javaから呼出し可能なCOBOLプログラムの指定。
```
>>JAVA-CALLABLE program-name
```
### JAVA-SHAREABLE
COBOLプログラムがJavaと共有可能なデータを持つことを指定。
```
>>JAVA-SHAREABLE
```
---
## IBM拡張機能(主要なもの)
Enterprise COBOL for z/OS V6.5は多くのIBM拡張機能を提供する:
- 特殊レジスタ: ADDRESS OF, LENGTH OF, RETURN-CODE, JSON-CODE, XML-CODE等
- 16進リテラル表記: X"...", NX"...", UX"..."
- NULL終端リテラル: Z"..."
- 日本語処理のためのDBCSサポート: Gリテラル、USAGE DISPLAY-1、PICTURE G/N
- 条件付きコンパイル: >>DEFINE, >>IF, >>EVALUATE
- CALL文のJava静的メソッド呼出し
- JSON GENERATE/PARSE文
- XML GENERATE/PARSE文
- ALLOCATE/FREE文による動的記憶管理
- 動的長さ基本項目(DYNAMIC LENGTH
- 無制限表(OCCURS UNBOUNDED
- 全関数のALL下标指定
- 64ビットアドレッシング(LP(64))
---
## ファイルステータスキー値
| コード | 意味 |
|--------|------|
| 00 | 正常終了 |
| 02 | 正常終了(重複レコード) |
| 04 | 正常終了(レコード長不整合) |
| 05 | 正常終了(参照オプショナルファイル未存在) |
| 10 | ファイル終了 |
| 14 | 相対ファイルの範囲外レコード |
| 21 | シーケンスエラー |
| 22 | 重複キー |
| 23 | レコード未存在 |
| 24 | バッファ不足 |
| 30 | 恒久的エラー |
| 34 | ファイル編成の境界違反 |
| 35 | ファイル未存在(OPEN |
| 37 | アクセスモード違反 |
| 38 | クローズ前のOPEN |
| 39 | 属性矛盾 |
| 41 | OPEN時のファイル未存在 |
| 42 | クローズ済ファイルのOPEN |
| 43 | 書込み禁止ファイルの書込み |
| 44 | 読込み専用ファイルの書換え/削除 |
| 46 | 読込み専用(順次) |
| 47 | OPEN時のファイル読込み不可 |
| 48 | ファイル編成とアクセスモード矛盾 |
| 49 | OPEN時のファイル属性不整合 |
| 90 | 論理エラー該当せず |
| 91 | ファイル機構のアベンド |
| 92 | ストレージ不足 |
| 93 | リソースアクセス不可 |
| 94 | ファイルの位置指定不整合 |
| 95 | ファイル宣言の不整合 |
| 96 | 入出力制御の矛盾 |
| 97 | ファイルの編成/モード矛盾 |
| 98 | ボリューム処理エラー |
| 99 | レコードロック競合 |
---
*本ドキュメントは IBM Enterprise COBOL for z/OS V6.5 Language Reference (SC27-8713-04) の内容に基づいて作成されました。*