こんにちは。
現在COBOLの勉強をしています。
あるプログラムのコードを読んでいて、分からない点があったので質問させていただきます。
COBOLに詳しい方、何卒よろしくお願いします。
内容は以下です。
※サンプル用にかなり書き換えており、
宣言等は省いてます。ご了承ください。
・読み込みファイル1(FILE1)
項目ID(F1-KEY) :項目名称(キー):プライマリキー
項目ID(F1-TORCD):項目名称(取引先コード):プライマリキー
項目ID(F1-KUBUN):項目名称(区分):プライマリキー
項目ID(F1-BIKO) :項目名称(備考)
・読み込みファイル2(FILE2)
項目ID(F2-KEY) :項目名称(キー):プライマリキー
項目ID(F2-TORCD):項目名称(取引先コード):プライマリキー
項目ID(F2-KUBUN):項目名称(区分):プライマリキー
項目ID(F2-BIKO) :項目名称(備考)
000000 ENVIRONMENT DIVISION.
000000 INPUT-OUTPUT SECTION.
000000 FILE-CONTROL.
000000 SELECT FILE1 ASSIGN FILE1-RDB
000000 ORGANIZATION INDEXED
000000 ACCESS MODE DYNAMIC
000000 RECORD KEY F1-KEY
000000 FILE STATUS IS FSTS.
000000 SELECT FILE2 ASSIGN FILE2-RDB
000000 ORGANIZATION INDEXED
000000 ACCESS MODE DYNAMIC
000000 RECORD KEY F2-KEY
000000 FILE STATUS IS FSTS.
000000***** FD句省略**************************************
000000*ファイル1READ
000000 SELECT FILE1.
000000*
000000 INITIALIZE F2-KEY1.
000000 MOVE F1-TORCD TO F2-TORCD.
000000 MOVE F1-KUBUN TO F2-KUBUN.
000000*
000000*ファイル2READ
000000 START FILE2 KEY NOT < F2-KEY1 INVALID
000000 STOP RUN.
000000
上記のような処理をSQL(ORACLE)に書き換えると、
SELECT *
FROM FILE1
OUTER JOIN FILE2 ON F1-TORCD = F2-TORCD
AND F2-KUBUN = F1-KUBUN;
の様になると考えているのですが、間違いないでしょうか?
ファイル2READ時の、「KEY NOT < F2-KEY1」がどういうことだろう?と引っかかっております。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
0
SELECT FILE1.
は文法エラーですね。
START FILE2 KEY NOT < F2-KEY1 INVALID STOP RUN.
は、
SELECT * FROM FILE2 WHERE プライマリキーのカラム名 >= ?;
で、プレースホルダー?
に、F2-KEY1の値をバインドします。
結果が0件ならプログラム終了です。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
0
COBOLでは、DMLを記述しません。RDBMSのようなシステムを操作する場合にも、一般的にはREAD、
WRITE,REWRITE、START、DELETE 文を利用します。ただ、UNIX系のOSで起動するCOBOLではその限りではありません。どのように利用するかは環境により独自に予約後が用意されていると思いますのでマニュアルを読んでください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.10%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/06/16 15:58
SELECT FILE1 では文法エラーになりますか。ちょっと調べてみます。
すみません、F2-KEY1より大きいプライマリキーというのがピンときません。
記載しておりませんでしたが、F2-KEY1がプライマリキーになります。
もう1点教えて頂きたいのですが、ファイル2を読み込む前の「MOVE TO」は結合条件に当たると考えていたのですが違うようなので、何のために「MOVE TO」を行っているのか教えて頂けないでしょうか。よろしくお願いします。
2016/06/16 16:47
SELECTは宣言文で用いられ、物理ファイルに対して論理ファイル名を宣言します。論理ファイル名しかないと意味不明です。
> F2-KEY1より大きいプライマリキーというのがピンときません。記載しておりませんでしたが、F2-KEY1がプライマリキーになります。
RDBMSであれば、プライマリーキーのカラム名があるはずで、F2-KEY1はそのカラムと比較する普通の変数名です。
> 何のために「MOVE TO」を行っているのか
プライマリーキーカラムと比較すべき値を作り出している。
2016/06/16 17:30 編集
記載してます通り、宣言を省略してますので、宣言してあるものと思って頂きたいです。
>RDBMSであれば、プライマリーキーのカラム名があるはずで、F2-KEY1はそのカラムと比較する普通の変数名です。
ちょっと投稿を編集しました。F2-KEY1がカラム名にあたります。
>プライマリーキーカラムと比較すべき値を作り出している。
つまり、F1-TORCD >= F2-TORCD,F2-KUBUN >= F1-KUBUNということでしょうか?
なかなか理解できずに申し訳ありません...。
2016/06/16 21:31
> F2-KEY1がカラム名にあたります。
COBOLの話じゃなくて、SQLの話をしています。
わかりにくかったようなので、回答を修正しました。
> つまり、F1-TORCD >= F2-TORCD,F2-KUBUN >= F1-KUBUNということでしょうか?
違います。
プライマリキーがF2-KEY1と等しいか大きいかどうかです。