マネージ コード内の JVM ホスト変数

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

マネージ アプリケーションに PIC 句を使用する従来のホスト変数宣言が含まれている場合は、OpenESQL Managed Runtime で各 PIC 句を読み取り、それを対応する JVM 型に変換する必要があります。ただし、PIC 句の代わりに JVM データ型を使用するホスト変数を宣言すると、次の利点が得られます。
  • パフォーマンスの改善 - OpenESQL Managed Runtime が PIC 句を JVM 型に変換する必要がないため、パフォーマンスが大幅に向上します。
  • サイズ制限なし - マネージ アプリケーションの 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