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

マネージ・アプリケーションの場合、OpenESQL は、従来のホスト変数宣言を使用するオプションと、JVM データ型をホスト変数宣言として使用するオプションを提供します。JVM データ型の使用は、OpenESQL Managed Runtime で可能になり、DBMAN 指令オプションを JDBC に設定することで指定されます。

マネージ・アプリケーションに、PIC 句を使用する従来のホスト変数宣言が含まれる場合、各 PIC 句を読み取り、その句を相当する JVM タイプに変換する OpenESQL Managed Runtime が必要になります。ただし、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データ型」を参照してください。

例: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