JVM COBOL コード内の JVM ホスト変数

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

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

例:JVM ホスト変数の定義

  *> -------------------------------------------
       *> 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 java.sql.Timestamp.
       01  EMP-JOB                            STRING.
       01  EMP-EDLEVEL                        BINARY-SHORT.
       01  EMP-SEX                            STRING.
       01  EMP-BIRTHDATE                      type java.sql.Timestamp.
       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