8

COBOLについて学び始めています。SQLデータベースを処理するプログラムを作成した経験がありますが、たとえば、COBOLがメインフレームに格納されているデータを格納および取得する方法が混乱していると思います。リレーショナルデータベースとは異なりますが、これまでに見たすべてのサンプルプログラムは、コマンドラインから直接データを取得します。実際のCOBOLプログラムがデータを処理する方法とは異なります。誰かがそれを説明できる、またはそれを説明できる優れたリソースを私に見せてもらえますか?

4

5 に答える 5

21

COBOL は、もう 1 つの第 3 世代のコンピューター言語です。ほとんどのものより少し古いからといって、不完全というわけではありません (実際にはかなりの荷物が付属していますが、それは別の話です)。

他の第 3 世代言語と同様に、COBOL は C プログラムで行うのとほとんど同じ方法でデータ ファイルを操作します。それについて奇妙な、神秘的、または魔法のようなものは何もありません。ファイルは、言語のファイル I/O 機能を使用して開かれ、読み取られ、書き込まれ、閉じられます。

実際のファイルとプログラムの間のリンクを形成するために、さまざまなメカニズムが使用されます。ここでの詳細は、多くの場合、使用しているオペレーティング システムに固有のものです。一般に、COBOL 実装は、実際の名前ではなく、論理ファイル名を使用して動作環境から分離しようとします。この追加された間接性は、異なるプラットフォームに移植されるプログラムを作成する場合に重要です (たとえば、Windows プラットフォームの IDE 内で作成およびテストし、メインフレームで実行するなど)。

次の例は、IBM メインフレーム環境に関連しています。

IBM メインフレームの世界では、プログラムがバッチまたはオンライン (CICS など) として実行されていることがわかります。CICS でファイル I/O を設定する方法については説明しません (長い話です)。ファイルの操作に使用されるプログラムは通常バッチです。以下は、バッチ プログラムがどのように機能するかを大まかに示したものです。

  1. バッチ プログラムは JCL 経由で実行されます。JCL は、実行するプログラム (「EXEC」ステートメント) を識別し、「DD」ステートメントを使用してプログラムが参照するファイルを識別するために使用されます。DD ステートメントの機能は、実際のファイルと、ファイルを参照するときに COBOL プログラムが参照する名前との間の論理接続を形成することです (これは、前述の分離メカニズムです)。例えば、

    JCLDDNAM DD DSN='HLQ.MY.FILE'...
    

    「DD」名「JCLDDNAM」を「HLQ.MY.FILE」という名前のファイルに関連付けます。この部分はプラットフォームに依存するため、詳細は動作環境に固有です。

  2. COBOL プログラムの 'FILE-CONTROL' セクションで、JCL で定義されている 'DD NAME' を、そのファイルを参照するために各 I/O ステートメントで使用する名前に接続します。この接続は、「SELECT」ステートメントを使用して定義されます。
    例えば、

    SELECT MYFILE
    ASSIGN JCLDDNAM
    remainder of select
    

    'JCL' で 'JCLDDNAM' に関連付けたファイルを、後で COBOL I/O ステートメントで参照する 'MYFILE' に接続します。SELECTステートメント自体は、ISO COBOL 標準の一部です。ただし、多くの COBOL 実装では、ファイル サブシステムへのさまざまな癖を容易にするために、いくつかの非標準の拡張機能が定義されています。

  3. 次のように「MYFILE」という名前を使用して、プログラムの「PROCEDURE DIVISION」内のファイルを開き、読み取り、書き込み、閉じます。

    OPEN MYFILE  
    READ MYFILE  
    CLOSE MYFILE  
    

上記は非常に単純化されており、COBOL 内でこれを行う方法は多数あります。全体像を理解するには、実際の努力、時間、および練習が必要です。上記の I/O ステートメントは COBOL 標準の一部ですが、すべてのベンダーが独自の拡張機能を持っています。

IBM COBOL は、幅広いファイル編成とアクセス方法をサポートしています。ファイル操作の構文と規則については、ここでIBM Enterprise COBOL 言語リファレンス マニュアルを確認できます。あなたのためにレイアウトされています)。

COBOL プログラムを介して SQL データベースを参照するためのセットアップは多少異なりますが、プログラムとデータベース サブシステムとの間の接続をセットアップする必要があります。IBM の世界では、これは JCL を通じて行われますが、他の環境では異なるメカニズムが使用されます。

IBM COBOL は、プリプロセッサーまたはコプロセッサーを使用して、データベース アクセスとデータ交換を統合します。たとえば、次のコードは、DB2 データベースから一部のデータを取得します。

MOVE 1234 TO PERSON-ID
EXEC SQL
  SELECT  FIRST_NAME,  LAST_NAME
  INTO   :FIRST-NAME, :LAST-NAME
  FROM PERSON
  WHERE PERSON_ID = :PERSON-ID
END-EXEC
DISPLAY PERSON-ID FIRST-NAME LAST-NAME

EXEC SQLとの間のものEND-EXECは、非常に単純な SQL 選択ステートメントです。コロンで始まる名前は、データを DB2 に渡したり、受け取ったりするために使用される COBOL ホスト変数です。以前にデータベース アクセス ルーチンをコーディングしたことがある場合、これは非常になじみ深いものに見えるはずです。このリンクは、SQL ステートメントを IBM Enterpirse COBOL プログラムに組み込むための簡単な紹介を提供します。

ところで、IBM Enterprise COBOL は XML 文書も扱うことができます。IBM に偏って申し訳ありませんが、それは私が最もよく知っている環境です。

これにより、正しい方向に進むことができます。

于 2010-03-14T03:32:34.480 に答える
3

SQL を使用して COBOL アプリケーションからデータを取得することはできない、おそらくお金をかけないと誰が言ったのでしょうか?

私が以前働いていた会社は、SQLite を使ってまさにそれを行いました。パブリック ドメイン ライブラリのこの小さな宝石は、SQL ステートメントをバイトコードにコンパイルしてから実行します。

SQLite の「バックエンド」レベルを、Cobol ファイルを処理する C ライブラリへのカスタム インターフェイスに置き換えることで、他の言語 (この場合は Python) から Cobol データをクエリすることが可能になりました。もちろん、SQLiteの制限内で動作しましたが、安定していて、十分にリレーショナルに見え、DBサーバーさえ必要としませんでした:-)

于 2010-03-18T17:10:12.500 に答える
1

従来のCOBOLバッチ環境では、cobolプログラムの「データセクション」を使用してデータベース接続を直接宣言します。データベース接続は、JCLで設定されます。COBOLはSQLよりも前のものであるため、それらは他のさまざまなタイプのデータベースである傾向がありましたが、IBMがSQLをDB/2で機能させた可能性があります。私はあなたがこのようなものに近い誰かから別の答えを得るだろうと想像します。他の言語で使用できるSQLプリプロセッサを見ると、カーソルがネイティブデータ型になり、クエリ結果をネイティブ変数に配信することがわかります。

于 2010-03-13T23:39:34.200 に答える
1

メインフレーム Cobol は組み込み SQL (SQLj のようなもの) を使用します。たとえば、次のようになります。

手続き課。

   Exec SQL
        Select col1, col2
          from myTable
        into :ws-col1, :ws-col2
        where col0 = :col0
   End-Exec

この場合、ホスト変数 ws-col0、ws-col1、および ws-col2 が working-storage セクションで定義されます。データベース インターフェイスは、そのデータを適切な場所に取得することを管理します。

実際に配布されたものに比べて非常に簡単です。

于 2010-06-08T09:00:02.150 に答える
0

私が働いていたすべてのIBMメインフレームショップは、リレーショナルデータベースと通信するCOBOLを使用していました。一般的に、それはIBMのDB2です。DB2は、メインフレーム上で実行されるリレーショナルデータベースであることに注意してください。WindowsまたはLinuxでも実行できます。

20年前、DB2メインフレームデータベースにデータを入力する主な方法は、CICSを使用することでした。CICSは、文字ベースのデータ入力画面と通信する「プレゼンテーションレベル」のソフトウェアです。CICSをPHPまたはASP.NETと同等の機能と考えてください。

今日、DB2にデータを取り込むためのオプションは他にもたくさんあります。CICSはまだオプションですが、「プレゼンテーション層」はPHP、ASP.NET、Win Forms、Java JSF、Powerbuilderである可能性があります。重要なことは、開発プラットフォームがDB2データベースドライバーと連携できる必要があるということです。プラットフォームは、Windows、Linux、および場合によっては他のものである可能性があります。

私のポイントは、データは多くのプラットフォームからさまざまな方法でメインフレームDB2データベースに入ることができるということです。COBOL言語は、データ入力、レポート、データCOBOLの変更などに関係している可能性があります。ただし、Windows、Web、およびメインフレームの一部である可能性がある多層アプリケーションの一部にすぎない可能性があります。インターンシップで使用するアプリケーションについてさらに情報があれば、具体的な例を挙げましょう。

于 2010-03-14T23:31:57.020 に答える