COBOL言語の「LOCK句」とは?ファイルロックについて知ろう | 用語辞典
COBOL(コボル)言語の予約語LOCK句を使った命令文の書き方とは
COBOL(コボル)言語のLOCK句とは?
COBOL(コボル)言語におけるLOCK句とは、同時に動作する複数のプログラムにより、同一のファイルのレコード操作へのアクセスを制御したい場合に使用します。
書き方:
LOCK MODE IS ロックモード [WITH LOCK ON [MULTIPLE] [RECORD/RECORDS]]
LOCK句はSELECT句の中で記述します。指定するロックモードには「AUTOMATIC(自動ロック)」「MANUAL(手動ロック)」「EXCLUSIVE(排他ロック)」があります。
- AUTOMATIC(自動ロック)
入出力両用で開かれたファイルからレコードにアクセスすると、自動でレコードがロックされます。入力用で開かれたファイルに対してはロックされません。
- MANUAL(手動ロック)
手動ロックを指定したファイルからレコードにアクセスするとき、READ文で「WITH LOCK」を指定された場合のみロックされます。自動ロック同様入力用で開かれたファイルに対してはロックされません。
<手動ロック時の記述例>
SELECT ファイル名項目
ASSIGN TO データ名 [ORGANIZATION IS ファイル編成]
LOCK MODE IS MANUAL
...
READ ファイル名項目 WITH LOCK
- EXCLUSIVE(排他ロック)
排他ロックを使用すると、ファイルを開いたときにそのファイルをロックすることができます。OPEN文で、排他ロックを抑制することもできます。
- 複数のレコードロック
複数レコードを指定する場合は自動ロックまたは手動ロック時に「LOCK MODE IS MANUAL」のあとに「 WITH LOCK ON MULTIPLE RECORDS」を記述します。
<複数レコードロックの記述例>
LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS
使用例:
ファイルのレコードを自動ロックする簡単なサンプルを紹介します。
読み込むファイルは事前に用意しておきます。ここでは、行順編成のフラット形式で以下のように記述したレコードを使用します。
test.txt-------------------
AAAAA
BBBBB
CCCCC
DDDDD
----------------------------
実行結果:
紹介したサンプルではファイルをAUTOMATIC(自動ロック)で指定し、ファイルをI-O(入出力両用)モードで開いています。
自動ロックを指定しておけば、READ文のファイルを読み込むときに自動的にレコードがロックされるため、他のプログラムから同じファイルに対してレコード操作ができなくなります。
LOCK句のCOBOL(コボル)言語における基本事項やルールについて
- LOCK、MODE IS、ロックモードなどの間の空白や改行は自由に指定できます。
- ファイルのロックモードはAUTOMATIC(自動ロック)」「MANUAL(手動ロック)」「EXCLUSIVE(排他ロック)」のいずれかを指定する必要があります。
- レコードのロックには「単一レコードロック」と「複数レコードロック」の2種類があります。
- 単一レコードをロックする場合は、1回に1つのレコードのみロックされます。ファイルの入出力操作を行うごとに前のロックが開放されます。
- 複数レコードをロックする場合は、同時に定義した複数のレコードのロックを保持できます。前回のロックされているレコードも開放されずに、ロックされた状態になります。
- レコードロックはファイルを閉じる、COMMIT文、ROLLBACK文を実行する、ロックされたレコードの削除などの操作を行うとレコードが開放されます。
COBOL(コボル)言語のLOCK句を扱う上での注意点
- LOCK MODE ISでファイルのレコードをロックする場合、入力用で開かれたファイルはロックが無効となります。
- MANUAL(手動ロック)を指定した場合は、READ文の後にWITH LOCK句を指定しなければロックが無効となります。以下のようにWITH LOCK句を指定しないと無効になりますのでWITH LOCK句の記述漏れに注意しましょう。述
- FILE-CONTROL.
- SELECT TEST-FILE ASSIGN TO 'test.txt'
- ORGANIZATION IS LINE SEQUENTIAL
- LOCK MODE IS MANUAL
- ...
- READ TEST-FILE WITH LOCK
- AT END
- NOT AT END
- END-READ
LOCK句を使ったCOBOL(コボル)プログラムの活用法
ファイルを扱う上で、レコードへのアクセスの競合を防ぐためにLOCK句は重要な手段です。ここでは、LOCK句を使用した活用法として、複数のレコードを手動でロックする簡単な方法を紹介します。
読み込むファイルは使用例で紹介したファイルと同じものを使用しています。
- IDENTIFICATION DIVISION.
- PROGRAM-ID. LOCK_SAMPLE02.
- ENVIRONMENT DIVISION.
- INPUT-OUTPUT SECTION.
- FILE-CONTROL.
- SELECT TEST-FILE ASSIGN TO 'test.txt'
- *>行順編成ファイル
- ORGANIZATION IS LINE SEQUENTIAL
- *>手動で複数のレコードをロック
- LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS
- FILE STATUS IS IN-FILE-STATUS.
- DATA DIVISION.
- FILE SECTION.
- FD TEST-FILE.
- 01 IN-FILE-REC PIC X(5).
- WORKING-STORAGE SECTION.
- 01 IN-FILE-STATUS PIC XX.
- PROCEDURE DIVISION.
- OPEN I-O TEST-FILE.
- PERFORM UNTIL IN-FILE-STATUS NOT = "00"
- *>ファイルを読み込みレコードをロックする
- READ TEST-FILE WITH LOCK
- AT END
- DISPLAY "READ END";
- NOT AT END
- DISPLAY IN-FILE-REC
- END-READ
- END-PERFORM.
- CLOSE TEST-FILE.
- STOP RUN.
実行結果:
サンプルでは、LOCK句でMANUAL(手動ロック)及び複数レコードのロックを指定しています。
「LOCK MODE IS MANUAL WITH LOCK ON MULTIPLE RECORDS 」
ファイルを入出力両用モード(I-O)で開き、手動ロックを指定しているので、READ文のあとに「WITH LOCK」を記述しています。
この記事を読んだ人は、こちらの記事も読んでいます
あなたのCOBOL技術を活かしませんか?
COBOL入門のカテゴリー
1. 優良社員が多数在籍しています
2. 即日派遣、又は請負います
3. 安心価格で請負います
4. 同時、協力会社募集中です
1. 正社員
2. 契約社員
3. 個人事業主
などの 求人情報 が閲覧できます。
目指せ!COBOLダントツ一番企業。
創業当初の話や理念が閲覧できます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- 【COBOL言語】条件分岐処理の代名詞「IF文」について知ろう|用語辞典
- COBOL言語の「MOVE文」とは?転記のルールをご紹介します|用語辞典
- COBOL言語の「STRING文」とは?文字連結の基礎知識と注意点|用語辞典
- 多枝分岐ってなに?COBOL言語の「EVALUATE文」を知ろう!|用語辞典
- COBOL言語の「PICTURE句」とは?基本事項を解説します!|用語辞典
- COBOL言語で計算処理をするなら「COMPUTE文」|用語辞典
- COBOL言語の「REDEFINES句」とは?使い方を確認しよう!|用語辞典
- 覚えておけば楽ができる?COBOL言語の「COPY文」の使い方|用語辞典
- COBOL言語の文字列操作のパターンを理解しよう!|基礎ガイド
- COBOL言語の初期化処理に重宝する「INITIALIZE文」とは?|用語辞典
- COBOL言語の「LOW-VALUE」の使い方について理解しよう!|基礎ガイド
- COBOL言語の「OCCURS句」について知ろう!学ぶべき基本とは|用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|用語辞典
- COBOL言語の「PERFORM文」とは。実行制御について解説!|用語辞典
- COBOL言語の繰り返し処理のパターンを理解しよう!|基礎ガイド
- COBOL言語の「定数」の種類と使い方について理解しよう!|用語辞典
- COBOLのDBアクセスパターンを学ぼう!「FETCH」|応用ガイド
- COBOL言語の「DISPLAY文」は、ディスプレイ出力の為にある|用語辞典
- COBOL言語の「VARYING句」は便利?使用方法を学びましょう|用語辞典