.NET COBOL コード内の .NET ホスト変数

.NET COBOL アプリケーションの場合、OpenESQL には従来のホスト変数宣言を使用するオプション、およびホスト変数宣言として .NET データ型を使用するオプションが用意されています。.NET データ型は、OpenESQL Managed Runtime を用いると使用でき、DBMAN 指令オプションを ADO に設定することで指定されます。

.NET COBOL アプリケーションに PIC 句を使用する従来のホスト変数宣言が含まれている場合は、OpenESQL Managed Runtime で各 PIC 句を読み取り、それを対応する .NET 型に変換する必要があります。ただし、PIC 句の代わりに .NET データ型を使用するホスト変数を宣言すると、次の利点が得られます。
  • パフォーマンスの改善 - OpenESQL Managed Runtime が PIC 句を .NET 型に変換する必要がないため、パフォーマンスが大幅に向上します。
  • サイズ制限なし - .NET COBOL アプリケーションの .NET 変数のサイズに制限はありませんが、ネイティブ COBOL アプリケーション (特に LOB データを含むアプリケーション) のホスト変数のサイズには制限があります。
  • アプリケーションの移植性の改善 - マネージ ランタイムにより、既存のネイティブ EXEC SQL アプリケーションを .NET に移植するプロセスが簡素化されます。
.NET ホスト変数を使用するようにアプリケーションをコーディングする際には、次の点に注意してください。
  • .NET ホスト変数はすべて 01 レベルで定義する必要があります。そうでない場合はコンパイラ エラーが発生します。
  • 共通の .NET データ型の構文は省略名で定義できます。たとえば、System.String は次のように簡単に定義できます。
    01 myName string.
  • 他の .NET 変数の構文では、通常は TYPE 句がインクルードされます。次に例を示します。
    01 myDate type System.DateTime.
  • ベンダーが提供する SQL データ型に特定の .NET 型が存在しない場合は、OBJECT をホスト変数型として使用できます。次に例を示します。
    01 myData object.
注:
  • .NET ホスト変数の使用がサポートされるのは、OpenESQL プリプロセッサのみです。現在、.NET アプリケーションで EXEC SQL 構文を直接サポートしている DBMS ベンダーはありません。
  • OpenESQL Managed Runtime の .NET ホスト変数の宣言の詳細については、「SQL データ型」の各トピックを参照してください。
  • OpenESQL アシスタントを使用すると、ツールの DCLGEN オプションを使用してテーブルの .NET ホスト変数を簡単に生成できます。この形式でコピーブックを生成する方法の詳細については、「OpenESQL アシスタント」を参照してください。

例:.NET ホスト変数の定義

  *> -------------------------------------------
       *> COBOL HOST VARIABLES FOR TABLE EMP
       *> -------------------------------------------
       01  EMP-EMPNO                          STRING.
       01  EMP-FIRSTNME                       STRING.
       01  EMP-MIDINIT                        STRING.
       01  EMP-LASTNAME                       STRING.
       01  EMP-WORKDEPT                       STRING.
       01  EMP-PHONENO                        STRING.
       01  EMP-HIREDATE                       type System.DateTime.
       01  EMP-JOB                            STRING.
       01  EMP-EDLEVEL                        BINARY-SHORT.
       01  EMP-SEX                            STRING.
       01  EMP-BIRTHDATE                      type System.DateTime.
       01  EMP-SALARY                         DECIMAL.
       01  EMP-BONUS                          DECIMAL.
       01  EMP-COMM                           DECIMAL.


EXEC SQL 
 SELECT 
        A.FIRSTNME
       ,A.LASTNAME
       ,A.HIREDATE
       ,A.SALARY
       ,A.EMPNO
INTO 
        :EMP-FIRSTNME
       ,:EMP-LASTNAME
       ,:EMP-HIREDATE:EMP-HIREDATE-NULL
       ,:EMP-SALARY:EMP-SALARY-NULL
       ,:EMP-EMPNO
   FROM HCOSQL.EMP A
  WHERE (A.EMPNO = :EMP-EMPNO)
END-EXEC