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ダントツ一番企業。
創業当初の話や理念が閲覧できます。
応募条件
※2020年5月31日を以って、締切りました。
18歳~28歳の方。
正社員採用において、北川社長の著書『祈り方が9割』を読んで感想文を事前に提出すると、無条件で最終面接まで進むことができます。
COBOLとは、どのようなプログラミング言語なのか、初心者にもわかりやすく、文法の例をあげて解説してます。
COBOL入門の人気記事
- COBOL言語で計算処理をするなら「COMPUTE文」|入門用語辞典
- COBOL言語の「ACCEPT文」の使い方を分かり易く解説|入門用語辞典
- COBOL言語初心者も安心! 難解「CALL文」をスッキリ解決|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のCOPY文活用法|応用ガイド
- 一歩先を行くCOBOL言語の表操作!逐次検索と二分検索|応用ガイド
- COBOL言語の加算処理の基本を伝授! 命令文「ADD」とは?|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のファイル併合処理|応用ガイド
- COBOL言語でファイルの開閉命令はOPEN文とCLOSE文!|入門用語辞典
- 徹底解説!一歩先を行くCOBOL言語のデータ共有|応用ガイド
- COBOL言語とは?プログラムの書き方やルールを解説!|基礎ガイド
- COBOL言語の歴史とこれまでの進化を知る!廃止・追加機能|基礎ガイド
- COBOL言語のオブジェクト指向について理解しよう!|基礎ガイド
- COBOL言語のディスプレイ出力とコンソール入力について|基礎ガイド
- COBOL言語が得意とする計算処理を体験してみよう!|基礎ガイド
- 一歩先を行くCOBOL言語のユーザ定義関数について|応用ガイド
- 初心者から中級者でも安心!理解できるCOBOL言語の勉強法|学習講座
- 初心者必見!COBOL言語を効率よくマスターする勉強法とは|学習講座
- COBOL初心者が犯しやすいミスとその対策について|学習講座
- COBOL初心者がやってはいけない勉強方法とは?|学習講座
- 一歩先へ行くCOBOLプログラマの知っておくべき4つのヒント|学習講座