9 トランスレータのコマンドラインとオプション
ソース・コードの作成後、SQLJトランスレータでこのコードを変換する必要があります。この章では、SQLJトランスレータのコマンドライン、オプションおよびプロパティ・ファイルについて説明します。内容は次のとおりです。
9.1 トランスレータのコマンドラインとプロパティ・ファイル
sqlj
スクリプトによってJava Virtual Machine(JVM)を起動し、SQLJトランスレータのクラス名sqlj
.tools
.Sqlj
をJVMに渡します。トランスレータの起動や、コマンドラインとプロパティ・ファイルの解析などは、JVMによって実行されます。ここでは、スクリプトの実行をSQLJの実行と呼び、スクリプトのコマンドラインをSQLJコマンドラインと呼びます。
コマンドラインの代表的な構文は、次のとおりです。
% sqlj <optionlist> filelist
optionlist
は、SQLJオプションの設定値を空白で区切ったリストです。Javaインタプリタ、コンパイラおよびカスタマイザに渡すオプションには、接頭辞を付けます。
filelist
は、SQLJトランスレータで処理するファイルを空白で区切ったリストです。.sqlj
、.java
、.ser
または.jar
を指定できます。ファイル名には、*
ワイルドカードを使用できます。たとえば、Foo*.sqlj
では、Foo1.sqlj
、Foo2.sqlj
およびFoobar.sqlj
が検索されます。
注意:
-
オプションを指定する位置は、必ずしもファイル・リストの前である必要はありません。オプションは、コマンドラインのどの箇所に指定した場合にも正常に処理されます。
-
すべてのコマンドラインのオプションは、変換されるすべてのファイルに適用されます。ファイル固有のオプションは設定できません。
ファイル・リストに.class
ファイルは指定しないでください。SQLJトランスレータがSQLJソース・ファイル中の変数の型解決に必要なクラスを見つけられるように、CLASSPATHを設定してください。-checksource
フラグが使用できる場合(デフォルト設定)、SQLJトランスレータでは、CLASSPATH内のコンパイルされていない.java
ファイルで必要なクラスも検索できます。
注意:
ただ単にsqlj
と入力してスクリプトを実行すると、使用頻度の最も高いSQLJオプション一覧が表示できます。処理対象ファイルを指定しない場合も、スクリプト実行のたびにこのオプション一覧が表示されます。つまり-help
フラグを設定した場合と同じ結果になります。
この項の内容は次のとおりです。
9.1.1 SQLJのオプション、フラグおよび接頭辞
ここでは、SQLJトランスレータに対して指定できるオプションについて説明します。ブール型オプションは、フラグと呼ばれます。JVM(SQLJスクリプトから起動)、およびJavaコンパイラとSQLJプロファイル・カスタマイザ(JVMから起動)に渡すオプションには、接頭辞を付けます。
SQLJオプションの概説
次の表9-1は、SQLJトランスレータでサポートされているオプションの一覧です。次のカテゴリに分類されています。
-
「基本」カテゴリのフラグとオプション。詳細は、「基本的なトランスレータ・オプション」を参照してください。
-
「高度」カテゴリのフラグ、オプションおよび接頭辞。詳細は、「高度なトランスレータ・オプション」を参照してください。
-
「環境」カテゴリのフラグとオプション。詳細は、「トランスレータによる代替環境のサポートとオプション」を参照してください。このカテゴリのフラグとオプションは、非標準のJVM、コンパイラまたはカスタマイザを使用するためのものです。
-
javac
カテゴリのオプションは、SQLJがコンパイラ接頭辞なしで直接認識するjavac
コンパイラ・オプションです。javacオプションはJavaコンパイラ(通常はjavac
)に渡され、その一部はSQLJトランスレータ設定にも影響します。詳細は、「javacのオプションのサポート」を参照してください。
表9-1 SQLJトランスレータのオプション
オプション | 説明 | デフォルト | カテゴリ |
---|---|---|---|
|
指定されたSQLJ文の中で複数回出現する同一のホスト変数を、単一のバインドとして処理するフラグです。 |
|
高度 |
|
Javaコンパイラに渡すオプションに付ける接頭辞です。 |
該当なし |
高度 |
|
オンライン・セマンティクス・チェックの結果のキャッシングを有効化します(キャッシングすると、データベースへのラウンドトリップが削減されます)。 |
|
高度 |
|
ソース・ファイル名とそのソース・ファイル中のPublicクラス(定義済の場合)の名前とが対応していない場合に、変換時に警告を出すかどうかを指定します。 |
|
環境 |
|
状況によってはクラス・ファイルに加えてソース・ファイルも、SQLJの型解決の検査対象に指定します。 |
|
高度 |
|
JVMとJavaコンパイラに対してCLASSPATHを指定します( |
なし |
基本 |
|
コード生成のモードを指定します。 |
|
基本 |
|
Javaのコンパイル処理を有効化/無効化します。対象は、SQLJの現在の実行で生成されたまたは以前に生成された |
|
高度 |
|
使用するJavaコンパイラを指定します。 |
|
環境 |
|
- |
|
環境 |
|
Javaコンパイラの出力を書き込むファイルを指定します。このオプションを設定しないと、コンパイラの出力は標準出力に送られます。 |
なし |
環境 |
|
|
|
環境 |
|
Oracle Dynamic Monitoring Service(DMS)で使用するコンポーネント(パッケージおよびクラス)のインストルメント処理を指定します。これは、インストルメントが- |
|
基本 |
|
SQLJで生成される |
空 ( |
基本 |
|
使用するプロファイル・カスタマイザを判断します。クラス名を指定します。 |
|
環境 |
|
URL設定のデフォルト接頭辞を設定します。 |
|
基本 |
|
|
該当なし |
|
|
|
該当なし |
|
|
SQLJにより生成される |
空 ( |
基本 |
|
登録するJDBCドライバ・クラスを判断します。クラス名またはクラス名のカンマ区切りのリストを指定します。 |
oracle.jdbc.OracleDriver |
基本 |
|
SQLJとコンパイラでグローバリゼーション・サポートに使用するエンコーディングを指定します。 |
JVMの |
基本 |
|
トランスレータのエラー・メッセージに原因と処置情報の表示を要求するフラグです。 |
|
基本 |
|
|
|
基本 |
|
|
該当なし |
|
|
SQLJオプションの名前、説明および現行値に関する様々なレベルの情報を表示するフラグです。コマンドラインでのみ指定できます。- |
無効 |
基本 |
|
Oracle DMSで使用する変換済ファイルをインストルメントするかどうかを指定します。 |
|
基本 |
|
- |
|
基本 |
|
JVMに渡すオプションに付ける接頭辞です。コマンドラインでのみ指定できます。 |
該当なし |
高度 |
|
生成されたJavaクラス・ファイルと元のSQLJコード間での行番号のマッピングを有効化します。 |
|
基本 |
|
コマンドライン全体を( |
無効 |
基本 |
|
|
|
基本 |
|
|
該当なし |
|
|
|
該当なし |
|
|
セマンティクス・チェックに使用するオフライン・チェッカを判断します。クラスの完全修飾名のリストを指定します。 |
oracle.sqlj.checker.OracleChecker |
高度 |
|
セマンティクス・チェックに使用するオンライン・チェッカを判断します。クラスの完全修飾名を指定します。(オンライン・チェックを有効にするには、- |
oracle.sqlj.checker.OracleChecker |
高度 |
|
パフォーマンスが最適化されるようにイテレータ列型およびサイズ定義を有効化します。トランスレータでOracle固有コード生成に直接使用されるか、Oracleカスタマイザにユーザー、パスワード、URLの設定とともに転送されてISOコード生成に使用されます。 |
|
基本 |
|
JDBCリソース割当てが最適化されるようにパラメータ・サイズ定義を有効化します(- |
|
基本 |
|
特定のデータ型にパラメータ・サイズのデフォルトを設定します(- |
|
基本 |
|
SQLJプロファイル・カスタマイザに渡すオプションに付ける接頭辞です。 |
該当なし |
高度 |
|
オフラインSQLパーサーを有効にするオプションです。使用可能な設定は、 注意: このオプションの設定によっては、- |
|
高度 |
|
コンパイルを挟んで、SQLJを2回実行することを |
|
環境 |
|
オンライン・セマンティクス・チェック用のデータベース接続のユーザー・パスワードを設定します。- |
なし |
基本 |
|
ISOコード生成の場合に、現在のSQLJの実行で生成されるプロファイル・ファイルのプロファイル・カスタマイズ処理を有効化または無効化します。 |
|
高度 |
|
オプション設定のコマンドラインの代替方法として、プロパティ・ファイルを指定します。( |
なし |
基本 |
|
ISOコード生成の場合に、生成した |
|
高度 |
|
実行中のステータス・メッセージの表示をSQLJに要求します。- |
|
基本 |
|
オンライン・セマンティクス・チェック用のデータベース接続のURLを設定します。 |
|
基本 |
|
オンライン・セマンティクス・チェックを有効にし、データベース接続のユーザー名(およびパスワードとURL)を設定します。- |
なし(オンライン・セマンティクス・チェックはありません。) |
基本 |
|
|
該当なし |
|
|
SQLJおよびJDBCドライバのバージョン情報に関する様々なレベルの情報を表示するフラグです。コマンドラインでのみ設定できます。 |
無効 |
基本 |
|
JVMを指定してSQLJトランスレータの実行に使用します。コマンドラインでのみ指定できます。 |
|
環境 |
|
各種のSQLJ警告を有効化または無効化するフラグのカンマ区切りリストです。個別フラグは、 |
|
基本 |
オプション、フラグおよび接頭辞に関する注意
次のことに注意してください。
-
前の表の「説明」列で「コマンドラインのみ」と示されているフラグ、オプションおよび接頭辞は、プロパティ・ファイルでは設定できません。
-
コマンドラインのオプション名は、他に渡されるオプションも含めて、大/小文字が区別され、通常はすべて小文字にします。通常、オプション値も大/小文字が区別されます。
-
SQLJの大半のオプションは、プロパティ・ファイルでも設定できます。
-
環境変数
SQLJ_OPTIONS
をコマンドラインのかわりに使用するか、またはコマンドラインと併用して、オプションを設定できます。 -
このマニュアルの説明では、ほとんどの場合、ブール・フラグの設定値を
true
またはfalse
で示していますが、yes
/no
、on
/off
または1
/0
でも有効化/無効化を行えます。
関連項目:
-passwordオプションに関する注意
ps
などのユーティリティにより他のユーザーがパスワードを傍受しないようにパスワードを指定するには、次のいずれかの方法を選択します。
-
-password
引数を省略します。この場合、コマンドラインでパスワードを入力するように求められます。password引数は、オペレーティング・システムには表示されません。 -
パスワードの設定をプロパティ・ファイルに追加し、このプロパティ・ファイルを使用するようにSQLJトランスレータを設定します。つまり、パスワードをオペレーティング・システムに公開しなくても、SQLJ変換スクリプトを実行することができます。
-
JDeveloperでSQLJを使用します。この方法では、オペレーティング・システムにパスワードは公開されません。
loadjava互換オプション
JavaおよびSQLJアプリケーションをOracle Database 12c リリース2 (12.2)インスタンスにロードするために使用するloadjava
ユーティリティとの互換のために、コマンドラインでの指定時に、次の代替構文が指定したオプション用に認識されます。
-
-
e
(-encoding
) -
-
h
(-help
) -
-
p
(-password
) -
-
u
(-user
) -
-
v
(詳細メッセージの出力。-status
に相当。)
loadjava
構文との一貫性を完全に保持するには、次のように等号(=)のかわりにスペースを使用してこれらのオプションを設定します。
-u HR -v -e SJIS
注意:
この代替オプション構文はコマンドラインまたは環境変数SQLJ_OPTIONS
でのみ認識されます。プロパティ・ファイルでは認識されません。
javacのオプションのサポート
SQLJは、Sun社のJava Development Kit(JDK)のJavaコンパイラjavac
のオプション設定を次のようにサポートしています。
-
値を伴う一部の
javac
オプションは、SQLJのオプションと一体化しています(-classpath
、-d
、-encoding
)。 -
値を伴うその他の
javac
オプションについては、コンパイラに値を正確に渡すように特別な処理が実装されました(-bootclasspath
、-extdirs
、-target
)。これらのオプションには、コンパイラの接頭辞が必要です。これらのオプションがSQLJの操作に影響することはありません。 -
javac
のフラグは、コマンドラインではcompiler
接頭辞なしで認識されます(-depend
、-deprecation
、-g
、-nowarn
、-O
、-verbose
)。これらのフラグの一部は、SQLJトランスレータ・フラグの設定にも影響を与えます。
表9-2に要約を示します。表に注記されているように、コンパイラ接頭辞が必須の場合もありますが、これらのオプションはすべてSQLJコマンドラインまたはプロパティ・ファイルに設定できます。
注意:
-
デフォルトの場合、
javac
は、送信されたプラットフォームのブートストラップ・クラスと拡張クラスに対して、クラスをコンパイルします。一方、javac
は、異なるJavaプラットフォームのブートストラップ・クラスと拡張クラスに対するクロスコンパイル・クラスもサポートします。javac
の-bootclasspath
オプションと-extdirs
オプションは、クロスコンパイル専用です(JDK 6)。 -
デフォルトでは、
javac
は、javac
が取得されたJDKバージョンと互換性がある.class
ファイルを生成します。-target
オプションを使用して、この設定を変更します。
表9-2 SQLJによるjavacオプションのサポート
コマンドライン・オプション(-Cが記されている場合は-C接頭辞付き) | 説明 | SQLJとの関連 |
---|---|---|
|
指定されている一連のブートストラップ・クラスに対するクロスコンパイルを |
なし |
|
|
SQLJのオプションも設定します。 |
|
|
SQLJのオプションも設定します。 |
|
依存性のある古いファイルの再帰的コンパイルを |
SQLJ |
|
非推奨のAPIが使用されている出力ソースの位置を |
なし |
|
|
SQLJのオプションも設定します。 |
|
指定されている拡張ディレクトリに対するクロスコンパイルを |
なし |
|
|
|
|
警告を生成しないことを |
|
|
|
|
|
指定のJDKバージョン・レベル以上のJVMでのみ動作するように |
なし |
|
|
|
javac
オプションの設定値と機能の詳細は、javac
のマニュアルを参照してください。
javacオプションの構文に関する注意事項
javac
オプションの構文に関して、次の注意事項があります。
-
JavaコンパイラのCLASSPATHとSQLJを実行するJVMのCLASSPATHを異なる値に設定する場合は、前者に
-C
接頭辞、後者に-J
接頭辞を使用して個別に設定する必要があります。それ以外の場合、接頭辞は不要です。 -
-d
または-encoding
コンパイラ・オプションを指定するときに、-C
接頭辞を付けないでください。SQLJとコンパイラは、-d
と-encoding
で同じ設定を使用します。 -
必要に応じて
-C
接頭辞を-depend
、-deprecation
、-g
、-nowarn
、-O
および-verbose
に使用できます。 -
SQLJのオプションでもあるオプション(
-classpath
、-d
および-encoding
)を除くすべてのjavac
オプションは、プロパティ・ファイルに設定する場合にはcompile.
接頭辞が必要です。 -
一貫性を保持するために、値を伴うオプションには等号(=)を使用することをお薦めします。ただし、コンパイラ接頭辞(コマンドラインでは
-C
、プロパティ・ファイルではcompile.
)を使用する場合はスペースも使用できます。
例
次の構文は、-C-bootclasspath
、-C-extdirs
および-C-target
オプションの使用例です。折り返されて表示されていますが、全体が1行で入力されています。
% sqlj -vm=/usr/local/packages/jdk6/bin/java -compiler-executable=/usr/local/packages/jdk6/bin/javac -C-bootclasspath=/usr/local/packages/jdk6/jre/lib/rt.jar -C-extdirs="" -C-target=1.1.8 Demo.sqlj
プロファイル・カスタマイザのオプション
プロファイル・カスタマイザのオプションであるカスタマイザ・ハーネスのフロントエンド、デフォルトのOracleカスタマイザおよびデバッグやデプロイメント時のセマンティクス・チェックに使用する特別なカスタマイザの詳細は、「カスタマイズおよび専用カスタマイザ」を参照してください。これは、ISO標準コード生成の場合(-codegen
=iso
)にのみ使用します。
9.1.2 コマンドラインの構文と処理
スクリプトsqlj
の実行によって発生するイベントの一般的なシーケンスは、「SQLJ変換処理」を参照してください。ここでは、コマンドラインの概要説明として、変換処理の詳細を説明します。
コマンドライン引数の使用方法
通常、コマンドラインでは次の構文を使用します。
% sqlj <optionlist> filelist
JVMを起動するときに、sqlj
スクリプトからJVMにすべてのコマンドライン引数が渡されます。JVMは渡された引数を該当機能(Javaコンパイラやプロファイル・カスタマイザなど)に渡します。
オプションとフラグの設定値は等号(=)を使用して指定しますが、簡略化するために、フラグを有効にする場合は=true
を指定する必要はありません。フラグ名の入力のみで十分です。ただし、フラグを無効にするには、=false
を指定する必要があります。フラグが前の値から切り替わらないためです。次に例を示します。
行マッピングを有効にするには、-linemap=true
または単に-linemap
を指定します。
行マッピングを無効化するには、-linemap=false
を指定します。
注意:
コマンドラインまたはプロパティ・ファイルで同じオプションを2回以上指定すると、最後の値が使用されます。
オプション・リストの引数
オプション・リストの引数は、次のように使用されます。
-
接頭辞
-J
、-C
または-P
が付いていないオプションはSQLJのオプションです(直接サポートされるコンパイラ・オプションは除きます)。SQLJトランスレータを起動するときに、JVMからSQLJトランスレータに渡されます。 -
-J
接頭辞が付くオプションはJVMのオプションで、JVMでそのまま使用されます。これらのオプションは、コマンドラインまたは環境変数SQLJ_OPTIONS
で指定する必要があります。トランスレータ・オプションと同様に、オプションの設定では次のように等号(=)を使用します。-J-Djavac.pipe.output=true
JavaコンパイラのCLASSPATHとSQLJを実行するJVMのCLASSPATHを異なる値に設定する場合は、前者に
-C
接頭辞、後者に-J
接頭辞を使用して個別に設定する必要があります。 -
-C
接頭辞が付いたオプションはJavaコンパイラのオプションで、JVMがコンパイラを起動するときに、JVMからコンパイラに渡されます。値をとるコンパイラ・オプションには特別なサポートが必要なため、javac
オプションに対して実装されました。これらについても、次のように等号を使用できます(空白でも機能します)。-C-bootclasspath=/usr/local/packages/jdk6/jre/lib/rt.jar
-
オプションに
-P
接頭辞を付けると、SQLJプロファイル・カスタマイザのオプションになり、JVMがカスタマイザを起動するときに、カスタマイザに渡されます。これは、ISO標準コード生成(-codegen
=
iso
)の場合にのみ使用します。トランスレータ・オプションと同様に、オプションの設定では次のように等号(=)を使用します。-P-user=HR
SQLJでの自動実行の対象でないプロファイルのカスタマイズは、高度な機能といえます。
関連項目:
ファイル・リストの引数
ファイル・リストの解析、ワイルドカード文字の処理およびファイル名の展開は、SQLJフロントエンドによって行われます。デフォルトのファイル処理は、次のように展開されます。
-
.sqlj
ファイルがSQLJトランスレータ、JavaコンパイラおよびSQLJプロファイル・カスタマイザによって処理されます(プロファイル・カスタマイザは-codegen
=
iso
の場合のみ)。 -
.java
ファイルがJavaコンパイラによって処理されます。SQLJトランスレータは、このファイルを使用して型を解決します。 -
.ser
プロファイルと.jar
ファイルは、プロファイル・カスタマイザでのみ処理されます(-codegen
=
iso
の場合のみ)。
コマンドラインで.sqlj
ファイルと.java
ファイルを一緒に指定することも、.ser
ファイルと.jar
ファイルを一緒に指定することも可能ですが、この2つのカテゴリを一緒には指定できません。.sqlj
ファイルと.java
ファイル間に依存関係がある場合、つまり互いのコードにアクセスする必要がある場合は、SQLJの各実行時に、依存し合うすべてのファイルをコマンドラインに入力する必要があります。別々のSQLJ実行に対して指定することはできません。これは、SQLJがすべての型を解決できなくなるためです。
注意:
コマンドラインで.java
ファイル名を入力する方法以外に、-checksource
オプションを有効にし、その後で.java
ファイルがCLASSPATHに含まれていることを確認する方法もあります。
ソース間の競合防止
SQLJトランスレータでは、同一ディレクトリの同一クラスを複数のソース・ファイルで定義できないようになっています。コマンドラインのファイル・リストに同じ.sqlj
ファイルまたは.java
ファイルへの参照が複数あると、2番目以降の参照がすべてコマンドラインから破棄されます。また、リスト内の.java
ファイルと.sqlj
ファイルのベース名とディレクトリが同じときに、-dir
オプションを指定しないと、.sqlj
ファイルのみが処理されます。この処理は、ワイルドカード文字にも適用されます。
次のコマンドラインの例について考えてみます(%
はシステム・プロンプトです)。カレント・ディレクトリ/myhome/mypackage
に、ファイルFoo.sqlj
とFoo.java
があるとします。
% sqlj Foo.sqlj /myhome/mypackage/Foo.sqlj
両方の参照先が同じファイルなので、トランスレータは/myhome/mypackage/Foo.sqlj
をコマンドラインから破棄します。
% sqlj Foo.sqlj Foo.java
トランスレータはFoo.java
をコマンドラインから破棄します。そうしないと、このコマンドラインは、トランスレータがFoo.java
との読み書きを両方とも同時に実行することになります。
% sqlj Foo.*
この場合も、トランスレータはFoo.java
をコマンドラインから破棄します。そうしないと、トランスレータはFoo.sqlj
とFoo.java
の両方を検索するので、書込み先と読込み元が同時にFoo.java
になります。
% sqlj -dir=outdir -d=outclasses Foo.sqlj Foo.java
これは問題ありません。生成されるFoo.java
はoutdir
サブディレクトリにあり、読み取られるFoo.java
は/myhome/mypackage
ディレクトリにあるためです。Foo.java
とFoo.sqlj
で異なるパッケージ内のクラスを定義すると仮定すると、Javaコンパイルで作成される.class
ファイルは、outclasses
ディレクトリの階層下の異なるサブディレクトリに配置されることになります。
このようにコマンドラインが処理されるので、次のようなコマンドを入力しても、問題なく実行されます。(問題のあるファイル参照は自動的に破棄されます。)
% sqlj *.sqlj *.java
この処理は様々な状況で利用できます。
コマンドラインの例と結果
次に、コマンドラインの例を示します(%
はシステム・プロンプトです)。この例では、コマンドライン構文の完全な例を示すために、いくつか高度な概念が使用されていますが、これについてはこの章の後半で詳細に説明します。
% sqlj -J-Duser.language=ja -warn=none -J-prof -encoding=SJIS *Bar.sqlj Foo*.java
このsqlj
スクリプトはJVMを起動して、JVMにSQLJトランスレータのクラス名を渡し、コマンドラインの引数を渡します。JVMは、SQLJのオプションをトランスレータとコンパイラに渡します。JVMに対するオプション(-J
が付いたオプション)がある場合、このスクリプトは、トランスレータのクラス・ファイル名の前に、このオプションをJVMに渡します(これは、Javaを手動で起動する場合に、クラス・ファイル名の入力の前に、Javaオプションを入力するのと同様です)。この例では、デフォルトのOracle固有コード生成を使用しているため、カスタマイズはありません。
前述の処理が完了すると、ユーザーが次のように入力したときと同じ結果になります(SushiBar.sqlj
、DiveBar.sqlj
、FooBar.java
およびFooBaz.java
がすべてカレント・ディレクトリにある場合)。
% java -Duser.language=ja -prof sqlj.tools.Sqlj -warn=none -encoding=SJIS SushiBar.sqlj DiveBar.sqlj FooBar.java FooBaz.java
このコマンドラインは折り返されて表示されていますが、全体が1行で入力されています。
コマンドラインを実行せずにエコーする場合
SQLJの-n
オプション(または-vm
=echo
)を使用して、sqlj
スクリプトによって生成され、SQLJトランスレータに渡されるコマンドラインが、実行されずに、エコーされます。これには、環境変数SQLJ_OPTIONS
およびコマンドラインの設定値が含まれますが、プロパティ・ファイルの設定値は含まれません。
9.1.3 プロパティ・ファイルによるオプション設定
コマンドラインのかわりに、プロパティ・ファイルでも、SQLJトランスレータ、JavaコンパイラおよびSQLJプロファイル・カスタマイザに対してオプションを指定できます。
Javaコンパイラを別のJVMで実行し、このJVMに対してコンパイル処理オプションを指定する場合も、プロパティ・ファイルで指定できます。SQLJでの変換後、コンパイラの実行時に、オプションがJVMに渡されます。ただし、一般的にはコマンドラインで-C-J
接頭辞を使用して、コンパイラのJVMに渡します。
SQLJの次のオプション、フラグおよび接頭辞を設定するために、プロパティ・ファイルを使用することはできません。
-
-classpath
-
-help
、-help-long
、-help-alias
、-C-help
、-P-help
-
-J
-
-n
-
-passes
-
-props
-
-version
、-version-long
-
-vm
たとえば、JVMに対するオプションはプロパティ・ファイルで指定できません。プロパティ・ファイルの読込みが、JVMの起動後に実行されるためです。
また、プロパティ・ファイルでは、loadjava
との互換性のためにコマンドラインでは認められているオプションの略称は使用できません(-e
、-h
、-p
、-u
、-v
)。
プロパティ・ファイルの構文
プロパティ・ファイルでは、1行に1つのオプションを設定します。SQLJのオプション行、コンパイラのオプション行およびカスタマイザのオプション行を混在できます。SQLJフロントエンドによってオプション行が解析され、適切に処理されます。
次に、各種オプションの構文を示します。
-
各SQLJオプションの前に、ハイフンではなく
sqlj.
(ピリオドまで)を付けます。この接頭辞で始まるオプションのみがSQLJトランスレータに渡されます。次に例を示します。sqlj.warn=none sqlj.linemap=true
-
各Javaコンパイラ・オプションの前に、
-C-
ではなく、接頭辞compile.
(ピリオドまで)を付けます。この接頭辞で始まるオプションがJavaコンパイラに渡されます。次に例を示します。compile.verbose compile.bootclasspath=/usr/local/packages/jdk6/jre/lib/rt.jar
-
汎用的なプロファイル・カスタマイズ・オプション(どのカスタマイザにも適用されるオプション)には、
-P-
ではなく、接頭辞profile.
(ピリオドまで)を付けます。この接頭辞で始まるオプションのみがプロファイル・カスタマイザに渡されます。次に例を示します。profile.backup profile.user=HR/hr
特定のカスタマイザに対するオプションを指定するには、次のように
profile.C
を使用します。profile.Csummary profile.Coptparamdefaults=VAR%(50),LONG%(500),RAW_TYPE()
Oracleのデフォルト・カスタマイズの対象でないプロファイルのカスタマイズは、高度な機能といえます。
関連項目:
-
コメント行はシャープ記号(
#
)で始めます。次に例を示します。# Comment line.
-
空白行も使用できます。
コマンドラインと同じように、プロパティ・ファイルでもフラグの有効化/無効化をtrue
/false
、on
/off
、1
/0
、またはyes
/no
で指定できます。フラグを有効にするには、次のようにフラグ名の入力のみで十分です。設定値の入力は必要ありません。
sqlj.linemap
注意:
一貫性を保持するために、プロパティ・ファイル内の値を伴うオプションには(スペースが使用できる場合にも)等号(=)を使用することをお薦めします。
プロパティ・ファイルの簡単な例
プロパティ・ファイルの設定例を示します。
# Set user and JDBC driver sqlj.user=HR sqlj.driver=oracle.jdbc.OracleDriver # Turn on the compiler verbose option compile.verbose
この設定は、次のSQLJコマンドラインに相当します。
% sqlj -user=HR -driver=oracle.jdbc.OracleDriver -C-verbose
プロパティ・ファイル: デフォルト以外の接続コンテキスト・クラス
宣言した接続コンテキスト・クラスSourceContext
の設定値をプロパティ・ファイルで指定する例を示します。
# JDBC driver sqlj.driver=oracle.jdbc.OracleDriver # Oracle 9.2 on spock.natdecsys.com sqlj.user@SourceContext=sde sqlj.password@SourceContext=fornow sqlj.url@SourceContext=jdbc:oracle:thin:@localhost:5221/myservice # Warning settings sqlj.warn=all # Cache sqlj.cache=on
デフォルトのプロパティ・ファイル
SQLJコマンドラインでプロパティ・ファイルを指定したどうかに関係なく、SQLJフロントエンドでsqlj.properties
というファイルが検索されます。このファイルの検索は、Javaホーム・ディレクトリ、ユーザー・ホーム・ディレクトリ、およびカレント・ディレクトリの順番で実行されます。見つかった各sqlj.properties
ファイルが順番に処理され、オプションの前の設定値は新しい設定値でオーバーライドされます。つまり、カレント・ディレクトリにあるsqlj.properties
ファイルで設定されたオプション値によって、ユーザー・ホーム・ディレクトリまたはJavaホーム・ディレクトリにあるsqlj.properties
ファイルで設定されたオプション値がオーバーライドされます。
関連項目:
9.1.4 環境変数SQLJ_OPTIONSによるオプションの設定
Oracle SQLJ実装では、コマンドラインのかわりに環境変数SQLJ_OPTIONS
を使用して、SQLJオプションを設定できます。「コマンドラインのみ」と示されているオプションは、プロパティ・ファイルでは設定できませんが、SQLJ_OPTIONS
変数を使用すると設定できます。
SQLJ_OPTIONS
変数では、あらゆるSQLJオプションを設定できますが、この変数で設定したオプション値は、JVMに渡されます。この変数は、同じ設定値を繰り返し使用するコマンドライン専用オプション(-classpath
など)に特に便利です。
次に、SQLJ_OPTIONS
設定の例を示します。
-vm=jview -J-verbose
SQLJ_OPTIONS
を使用すると、SQLJによってSQLJ_OPTIONS
の設定値が、SQLJコマンドラインの先頭(他のコマンドライン・オプション設定の前)に、順番に挿入されます。
注意:
通常、SQLJ_OPTIONS
の構文はコマンドラインの構文と同じですが、これはオペレーティング・システムによって異なります。オペレーティング・システム固有の制限が存在することもあります。たとえばMicrosoft Windows 95では、「コントロール パネル」の「システム
」の「ハードウェア環境
」タブを使用します。また、Windows 95では変数の設定に等号(=)を使用できないため、SQLJでは=
のかわりに#
を使用してSQLJ_OPTIONS
を設定できます。詳細は、使用するオペレーティング・システムのドキュメントを参照してください。
9.1.5 オプション設定の優先順位
SQLJでは、オプション値が次の順に設定されます。
-
オプションをデフォルト値に設定します(デフォルト値がある場合)。
-
Javaのホーム・ディレクトリで
sqlj.properties
ファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。 -
ユーザーのホーム・ディレクトリで
sqlj.properties
ファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。 -
カレント・ディレクトリで
sqlj.properties
ファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。 -
環境変数
SQLJ_OPTIONS
でオプション設定を探し、見つかったオプション設定をコマンドラインの先頭に挿入します。SQLJ_OPTIONS
の指定どおりに、オプションを設定します。 -
コマンドラインでオプション設定を探し、この指定に基づき、オプション値を設定します。SQLJはコマンドラインを処理しながら、
-props
オプションで指定されているファイルを調べ、その指定に基づき、オプション値を設定します。
注意:
-
同じオプションが複数回設定されていると、前の設定値が後の設定値によって上書きされます。
-
sqlj.properties
ファイルのオプション設定は、上から下に読み込まれます。つまり、下方のエントリが上方のエントリより優先されます。 -
コマンドラインの
-props
オプションでプロパティ・ファイルを指定すると、このファイルのオプション設定がコマンドラインの-props
オプションの位置に挿入されます。 -
SQLJでは、コマンドラインのオプションが、
-props
ファイルから挿入されたオプションも含めて、左から右に読み取られます。つまり、後(右方)の設定値が前(左方)の設定値より優先されます。
例
SQLJを次のように実行するとします。
% sqlj -user=HR -props=myprops.properties -dir=/home/java
ファイルmyprops.properties
はカレント・ディレクトリにあり、次の値が設定されているものとします。
sqlj.user=tony sqlj.dir=/home/myjava
これらの設定値は、コマンドラインの-props
オプションの指定位置に挿入されているかのように処理されます。したがって、user
オプションの設定値としては、HR
エントリよりtony
エントリが優先され、dir
オプションの設定値としては、/home/myjava
エントリより/home/java
エントリが優先されます。
9.2 基本的なトランスレータ・オプション
ここでは、SQLJの実行時に指定できる基本的なフラグとオプションの構文と機能について説明します。ここで説明するオプションは、標準の操作モードで実行できます。プロパティ・ファイルでも指定できるオプションの構文も示します。
この項の内容は次のとおりです。
9.2.1 基本的なコマンドライン専用オプション
次の基本的なオプションはSQLJのコマンドラインまたは環境変数SQLJ_OPTIONS
でのみ指定できます。
-
-props
-
-classpath
-
-help
、-help-long
、-help-alias
、-P-help
、-C-help
-
-version
、-version-long
-
-n
これらのオプションは、プロパティ・ファイルでは指定できません。コマンドライン専用フラグ(-help
、-version
および-n
)では、=
true
構文を使用できません。これらのフラグを有効にするには、次のようにフラグ名のみを入力します。
sqlj -version-long
注意:
コマンドラインまたはSQLJ_OPTIONS
でのみ設定可能な高度なオプション、フラグおよび接頭辞として、-J
、-passes
および-vm
があります。
入力プロパティ・ファイル(-props)
-props
オプションでは、SQLJがオプション設定を読み取るプロパティ・ファイルを指定します。コマンドライン構文は次のとおりです。
-props=filename
次に例を示します。
-props=myprops.properties
Java Virtual Machineとコンパイラで使用するCLASSPATH(-classpath)
大半のJVMおよびコンパイラへの対応として、SQLJはコマンドラインで指定された-classpath
オプションを認識します。このオプションの設定では、ほとんどのJVMまたはコンパイラと同じようにスペースを使用することも、他のSQLJオプションと同じように等号(=)を使用することも可能です。この例(両方ともUNIX環境で実行)を次に示します。
-classpath .:$ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar -classpath= .:$ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar
-classpath
オプションは、JVMとJavaコンパイラの両方に対して、JavaのCLASSPATHを設定します。それぞれ別のCLASSPATHを使用する場合は、SQLJの-J
および-C
接頭辞を使用します。
注意:
この章で説明する他のオプションと同様、-classpath
オプションの設定で=
を使用しても、このオプション文字列がJVMおよびコンパイラに渡されるときに=が削除されます。これは、JVMおよびコンパイラのオプション設定では、=
構文がサポートされないためです。
コマンドラインの構文は、次のとおりです。
sqlj -classpath=class_path
次に例を示します。
sqlj -classpath=$ORACLE_HOME/jdbc/lib/ojdbc6.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar
SQLJのオプション情報(-help)
コマンドラインで-help
フラグを次のように設定して、SQLJオプションに関する表示情報の詳細度を指定できます。
-
-help
-
-help-long
-
-help-alias
このオプションを有効にするには、次のようにコマンドラインで設定します。
% sqlj -help
% sqlj -help-long
% sqlj -help-alias
これらの形式のいずれかで-help
フラグを指定した場合、コマンドラインでファイル名などのオプションを指定しても、入力ファイルの変換は実行されません。SQLJでは、トランスレータの実行とヘルプ表示のどちらか一方を想定しており、両方を同時に実行することはできません。
プロファイル・カスタマイザまたはJavaコンパイラに関する説明を表示するには、次のように-P
および-C
接頭辞を付けてヘルプを要求します。-help
フラグと同じように、カスタマイザまたはコンパイラのヘルプを要求すると、変換されません。
% sqlj -P-help % sqlj -C-help
他のコマンドライン専用フラグと同様に、-help
(および-P-help
と-C-help
)では、=true
構文を使用できません。有効にするには、フラグ名のみを入力します。
注意:
-
loadjava
ユーティリティとの互換用に、-help
のかわりに-h
をコマンドラインで指定できます。 -
単一のコマンドラインで
-help
フラグを複数設定できます。-P-help
と-C-help
も設定できます。 -
-P
と-C
は通常、プロパティ・ファイルで設定できますが、-P-help
と-C-help
はコマンドライン専用です。 -
処理対象ファイルを指定しないでSQLJを実行した場合も、ヘルプが表示されます。つまり、
-help
の設定時と同じ結果になります。
最も基本的なヘルプを表示するには、-help
を指定します。次の情報が表示されます。
-
使用頻度が最も高いSQLJオプションの概要
-
指定できるその他の
-help
フラグ値のリスト
-help-long
を設定すると、SQLJオプションの詳細情報が一覧表示されます。具体的には、各オプションに関して次の情報が表示されます。
-
オプション名
-
オプションの型(
int
やString
など、オプションの入力値としてのJava型) -
説明
-
現行の値
-
現行の値の設定方法(コマンドライン、プロパティ・ファイルまたはデフォルト)
注意:
オプション設定の結果を確認するには、そのオプションと-help-long
オプションを同一のコマンドラインで指定します。この機能は、特に複雑なオプション(-warn
など)を指定する場合やオプションを組み合せる場合に便利です。
-help-alias
を設定すると、loadjava
ユーティリティ対応として、コマンドラインでサポートされている略称が一覧表示されます。
コマンドライン構文は次のとおりです。
sqlj help_flag_settings
次に例を示します。
sqlj -help sqlj -help -help-alias sqlj -help-long sqlj -warn=none,null -help-long sqlj -help-alias
デフォルトでは、これらの設定は無効になっています。
SQLJのバージョン番号(-version)
コマンドラインで-version
フラグを次の値に設定して、表示するSQLJおよびJDBCドライバのバージョンに関して様々なレベルの情報の表示を指定します。
-
-version
-
-version-long
このオプションを有効にするには、次のようにコマンドラインで設定します。
% sqlj -version
% sqlj -version-long
-version
オプションを使用すると、コマンドラインでファイル名などのオプションを指定しても、入力ファイルの変換は行われません。SQLJでは、トランスレータの実行とバージョン情報の表示のどちらか一方を想定しており、両方を同時に実行することはできません。コマンドラインに入力したプロパティ・ファイルなどはすべて無視されます。他のコマンドライン専用フラグと同様に、-version
には、=true
構文を使用できません。このフラグを有効にするには、フラグ名のみを入力します。
-version
を設定すると、次のようにSQLJのリリース番号が表示されます。
sqlj -version Oracle SQLJ Release 12.1.0.1.0 Production Copyright © 1997, 2012, Oracle Corporation. All Rights Reserved.
-version-long
を設定すると、SQLJとSQLJランタイム・ライブラリのリリース、JDBCドライバのリリース番号(見つかった場合)、Java環境に関する情報が表示されます。たとえば、Oracle JDBCを使用している場合は、このオプションで次のように表示されます。
sqlj -version-long Oracle SQLJ Release 12.1.0.1.0 Production Copyright © 1997, 2012, Oracle Corporation. All Rights Reserved. JDBC version: Oracle JDBC driver version 12.1 (12.1.0.1.0) Java version: 1.6 (1.6.0_04)
このフラグによって、SQLJのインストールと、現在使用しているJDBCやJDKのバージョンを確認できます。コマンドライン構文は次のとおりです。
sqlj version_flag_settings
次に例を示します。
sqlj -version sqlj -version -version-long sqlj -version-long
デフォルトでは、これらの設定は無効になっています。
非実行のコマンドラインのエコー(-n)
-n
フラグをコマンドラインで指定すると、sqlj
スクリプトは、SQLJトランスレータに渡されるコマンドライン全体(SQLJ_OPTIONS
の設定を含む)を作成し、SQLJトランスレータでは実行しないでユーザーにエコーするように指示されます。これには、SQLJトランスレータを実行するために起動されるJVM名の取得とエコー、およびトランスレータのクラス名全体のエコーも含まれます。プロパティ・ファイルの設定値は含まれません。
次の内容が表示されます。
-
略称で入力したオプション名を完全に展開した名前(
loadjava
対応の-u
などの略称が展開され、完全な名前が表示されます。) -
コマンドの文字列全体が構築されてトランスレータに渡されるときのオプションの並び順
-
SQLJ_OPTIONS
の設定とコマンドラインの設定の競合の可能性
-n
オプションは、コマンドラインまたはSQLJ_OPTIONS
変数のどこにでも指定できます。他のコマンドライン専用フラグと同様に、-n
には、=true
構文を使用できません。このフラグを有効にするには、フラグ名のみを入力します。
次の場合を想定してください。SQLJ_OPTIONS
で次のように設定します。
-user=HR/hr@jdbc:oracle:thin:@ -classpath=/myclasses/bin
次のコマンドラインを入力します。
% sqlj -n -e SJIS myapp.sqlj
次のエコーが表示されます。
java -classpath /myclasses/bin sqlj.tools.Sqlj -user=HR/hr@jdbc:oracle:thin:@ -C-classpath=/myclasses/bin -encoding=SJIS myapp.sqlj
全体が1行で入力されていることに注意してください。
注意:
-
コマンドラインでパスワードをエコーすることは安全な方法ではありません。
-
-n
のかわりに、-vm
=echo
と入力することも可能です。 -
オプション設定を確認するもう1つの効果的な方法は、
-help-long
フラグを使用することです。これによって、すべてのオプションの現行の設定が表示されますが、その中には、コマンドラインで設定したその他のオプションと、プロパティ・ファイルおよびSQLJ_OPTIONS
の設定値も含まれます。
コマンドライン構文は次のとおりです。
-n
次に例を示します。
-n
デフォルトでは、この設定は無効になっています。
9.2.2 出力ファイルとディレクトリのオプション
-encoding
で、SQLJの入力および出力ソース・ファイルのエンコーディングを指定します。次のオプションで、SQLJの出力ファイルを格納するディレクトリを指定します。
-
-d
-
-dir
入力および出力ソース・ファイルの文字エンコーディング(-encoding)
-encoding
オプションで、エンコーディングを指定します。このエンコーディングは、.sqlj
および`.java
入力ファイルとグローバリゼーション・サポートの目的で生成される.java
ファイルに適用されます。javac
との互換性を確保するため、コマンドラインでこのオプションを設定するときに、次の例のように空白または等号(=)を使用できます。
-encoding=SJIS -encoding SJIS
ただし、プロパティ・ファイルでsqlj.encoding
を指定するときは、スペースではなく=
を使用します。
-compiler-encoding-flag
がオンの場合、このオプションを指定すると、Javaコンパイラにも渡されます。Javaコンパイラは、この値に基づき、処理する.java
ファイルの文字エンコーディングを指定します。
次の点に注意してください。
-
-classpath
および-d
オプションと同様、-encoding
オプションの設定で=
を使用しても、このオプション文字列がJVMおよびコンパイラに渡される際に=が削除されます。JVMとコンパイラでは、オプション設定に=
を使用できないためです。 -
loadjava
ユーティリティ対応として、コマンドラインで指定した-e
は-encoding
として認識されます。 -
Javaプロパティ・ファイル(
sqlj.properties
やconnect.properties
など)には、-encoding
オプションを使用できません。プロパティ・ファイルでは、常に8859_1
エンコーディングを使用します。これは、特別なSQLJの機能ということではなく、一般的なJavaの機能です。ただし、Unicodeのエスケープ・シーケンスなら、プロパティ・ファイルで使用できます。ネイティブ・コードのファイル用のエスケープ・シーケンスを作成するには、native2ascii
ユーティリティを使用します。関連項目:
コマンドライン構文は次のとおりです。
-encoding=Java_character_encoding
次に例を示します。
-encoding=SJIS
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.encoding=Java_character_encoding
次に例を示します。
sqlj.encoding=SJIS
デフォルトでは、このオプションはJVMシステム・プロパティfile.encoding
に設定されます。
.serおよび.classファイルの出力ディレクトリ(-d)
-d
オプションは、SQLJトランスレータで生成されるプロファイルのルート出力ディレクトリを指定するもの(ISO標準コード生成、つまり-codegen
=iso
の場合にのみ関係する)ですが、コンパイラで生成される.class
ファイルのルート出力ディレクトリを指定するためにJavaコンパイラにも渡されます。プロファイルが.ser
ファイルとして生成されるか(デフォルト)、.class
ファイルとして生成されるか(-ser2class
オプションが有効な場合)は、-d
オプションによる配置とは無関係できます。
ディレクトリを指定すると、このディレクトリの下の該当パッケージに出力ファイルが生成されます。たとえば、ソース・ファイルがa.b.c
パッケージにあるときに、/mydir
ディレクトリを指定すると、出力ファイルが/mydir/a/b/c
ディレクトリに格納されます。相対ディレクトリ・パスを指定すると、カレント・ディレクトリからの相対になります。
javac
対応として、コマンドラインでこのオプションを指定するときは、次のようにスペースまたは等号(=
)を使用できます(次の例では、どちらも/root
を生成されたプロファイル・ファイルのルート・ディレクトリとしています)。
-d=/root -d /root
ただし、プロパティ・ファイルで-d
を指定するときは、スペースではなく=
を使用します。次に例を示します。
sqlj.d=/root
カレント・ディレクトリが/root/home/mydir
のときに、次のように-d
オプションで相対ディレクトリ・パスmysubdir/myothersubdir
を指定すると、/root/home/mydir/mysubdir/myothersubdir
をルート・ディレクトリとして、プロファイル・ファイルが生成されます。
-d=mysubdir/myothersubdir
標準構文も使用できます。つまり、次のように、カレント・ディレクトリをピリオド1個で、1レベル上のディレクトリをピリオド2個で表現できます。
-d=. -d=../paralleldir
-d
オプションに何も指定しないと、生成された.class
ファイルは、SQLJで生成された.java
ファイルの-dir
オプションに従って、対応する.java
ファイルと同じディレクトリに格納されます。生成された.ser
ファイルは、対応する.sqlj
ファイルと同じディレクトリに格納されます。
注意:
-
-d
を次のように無指定にすることも可能です(プロパティ・ファイル中の設定値をオーバーライドする場合)。-d=
-
この説明では、ファイル・セパレータとしてスラッシュ(/)を使用しています。ただし、このようなオプションを実際に指定するときは、JVMの
file.separator
システム・プロパティで指定したオペレーティング・システムのファイル・セパレータを使用する必要があります。 -
-classpath
および-encoding
オプションと同様、-d
オプションの設定で等号(=)を使用しても、このオプション文字列がJVMおよびコンパイラに渡される際に=が削除されます。JVMとコンパイラでは、オプション設定に=
を使用できないためです。
コマンドライン構文は次のとおりです。
-d=directory_path
次に例を示します。
-d=/topleveldir/mydir
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.d=directory_path
次に例を示します。
sqlj.d=/topleveldir/mydir
このオプションにはデフォルト値はありません。
.javaファイルの出力ディレクトリ(-dir)
SQLJトランスレータで生成する.java
ファイルのルート・ディレクトリは、-dir
オプションで指定します。ディレクトリを指定すると、このディレクトリの下の該当パッケージに出力ファイルが生成されます。たとえば、ソース・ファイルがa.b.c
パッケージにあるときに、/mydir
ディレクトリを指定すると、出力ファイルが/mydir/a/b/c
ディレクトリに格納されます。相対ディレクトリ・パスを指定すると、カレント・ディレクトリからの相対になります。
次の簡単な例では、/root
をルート・ディレクトリとして.java
ファイルが生成されます。
-dir=/root
カレント・ディレクトリが/root/home/mydir
で、次のように-dir
オプションに相対ディレクトリ・パスmysubdir/myothersubdir
を設定しているとします。
-dir=mysubdir/myothersubdir
/root/home/mydir/mysubdir/myothersubdir
が生成された.java
ファイルのルート・ディレクトリになります。
標準構文も使用できます。つまり、次のように、カレント・ディレクトリをピリオド1個で、1レベル上のディレクトリをピリオド2個で表現できます。
-dir=. -dir=../paralleldir
-dir
オプションを指定しないと、元の.sqlj
ソース・ファイルと同じディレクトリにファイルが生成されます(カレント・ディレクトリには生成されません)。.sqlj
ソース・ディレクトリを出力ディレクトリとして指定する(プロパティ・ファイルなどで行った他の-dir
設定を無効にする)には、次のように-dir
オプションを使用します。
-dir=
注意:
-d
オプションでなく、-dir
オプションを指定した場合は、その際に-dir
で指定したディレクトリに、生成済の.class
ファイルが一緒に格納されます。ただし、生成済の.ser
ファイルの格納先は、.sqlj
ファイルと同じディレクトリとなります。
コマンドライン構文は次のとおりです。
-dir=directory_path
次に例を示します。
-dir=/topleveldir/mydir
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.dir=directory_path
次に例を示します。
sqlj.dir=/topleveldir/mydir
このオプションにはデフォルト値はありません。
9.2.3 接続オプション
オンライン・セマンティクス・チェック用のデータベース接続の際は、次のオプションを使用します。
-
-user
-
-password
-
-url
-
-default-url-prefix
-
-driver
-
driver_name
SQLJトランスレータは、アプリケーション実行時と同じデータベースまたはスキーマに接続する必要はありません。アプリケーションのソース・コード中の接続情報は、SQLJオプションの接続情報とは別々に指定できます。実際に、デプロイメント環境が開発時とテスト時には使用できないことがあります。
オンライン・セマンティクス・チェックとユーザー名(-user)
データベース接続を行わない簡単なセマンティクス・チェックをオフライン・チェックと呼びます。接続が必要となる、より詳細なセマンティクス・チェックをオンライン・チェックと呼びます。オンライン・チェックでは、SQLJの強い型指定パラダイムの主要メリットの1つが提供されます。つまり、互換性のない型によって、通常であればランタイムSQL例外となるものが、ユーザーがアプリケーションを実行する前の変換中に捕捉されます。
-user
オプションを使用すると、オンライン・セマンティクス・チェックが有効になり、基本スキーマのユーザー名(スキーマ名)を指定できます。基本スキーマとは、トランスレータに提供されるサンプル・データベース・スキーマであり、トランスレータでチェック実行時に使用されます。-user
オプションは、パスワードとURLの指定にも使用できます(これに対し、-password
と-url
オプションは別々に使用します)。
他のフラグでは、オンライン・セマンティクス・チェックを有効化および無効化できません。SQLJでは、-user
オプションの有無によって、オンライン・セマンティクス・チェックを有効化および無効化します。
注意:
-
SQLJの
-parse
オプションの設定によっては、-user
オプションの効果が無視され、オンライン・セマンティクス・チェックも無効になります。 -
loadjava
ユーティリティ対応として、-user
のかわりに-u
をコマンドラインで指定できます。 -
ユーザー名には文字
/
または@
を使用できません。 -
コマンドラインでユーザー名を指定するときは、次のように
=
のかわりにスペースを使用できます。-user HR/password -user@CtxClass HR/password -u HR/password -u@CtxClass HR/password
-
文字
@
を使用したパスワードは、-user
オプションでは設定できません。-user
と-password
をそれぞれ別に設定する必要があります。 -
ログイン名が
DBA
グループのメンバーである場合、SYSDBA
として、SYS
スキーマに接続する特別な権限があります。この場合、ユーザー名SYS
またはINTERNAL
を指定できます。 -
ISOコード生成では、トランスレータの
-user
設定がプロファイル・カスタマイザに転送されますが、カスタマイザのuser
設定によって無視されることもあります。
次に、-user
オプションの最も基本的な使用方法を示します。
-user=HR
DefaultContext
クラスのデフォルト接続などのインスタンスのみを使用すると、設定値がすべてのSQLJ実行文に適用されます。この例では、HR
スキーマに対してオンライン・チェックが行われます。
パスワードまたはURL(あるいはその両方)をユーザー名と一緒に次の構文で指定することも可能です(パスワードの前に/
を付け、URLの前に@
を付けます)。
-user=HR/password
-user=HR@jdbc:oracle:oci:@
-user=HR/password@jdbc:oracle:oci:@
URLを-url
オプションで指定し、パスワードを対話形式または-password
オプションで指定する方法もあります。
オンライン・セマンティクス・チェックを無効化するには、次のように-user
オプションを空の文字列に設定します。
-user=
デフォルト接続やDefaultContext
クラスの他のインスタンスのみを使用すると、この設定値がすべてのSQLJ実行文に適用されます。
オンライン・セマンティクス・チェックの無効化は、プロパティ・ファイルで有効にしたオンライン・チェックをコマンドラインでオーバーライドする場合や、デフォルトのプロパティ・ファイルで有効にしたオンライン・チェックをユーザー指定のプロパティ・ファイル(-props
オプションで指定)でオーバーライドする場合などに便利です。
専用のユーザー名URL.CONNECT
もあります。このユーザー名を使用して、URLで接続のユーザーとパスワードなどの詳細を指定できます。
アプリケーションでさらに接続コンテキスト・クラスを宣言して使用する場合は、これらのクラスのインスタンスを使用するSQLJ実行文をテストするときに-user
を使用できます。次のように、特定の接続コンテキスト・クラス(CtxClass
など)のオンライン・チェックを行うユーザー名を指定します。
-user@CtxClass=HR
この指定では、CtxClass
の接続コンテキストのインスタンスが指定されているすべてのSQLJ実行文に対して、HR
スキーマのオンライン・チェックが行われます。
デフォルトの接続コンテキスト・クラスの場合と同様、次のように特定の接続コンテキスト・クラスに対するパスワードまたはURLを-user
で指定できます。
-user@CtxClass=HR/password@jdbc:oracle:oci:@
接続コンテキスト・クラスCtxClass
は、ソース・コード中に宣言するか、あらかじめ.class
ファイルにコンパイルしておく必要があります。
各接続コンテキスト・クラスに対してオンライン・チェックの有効化やユーザー名の設定を行う場合、そのクラスごとに-user
オプションを個別に指定します。次に示したように、この設定は他のユーザーには反映されません。次に例を示します。
-user@CtxClass1=user1 -user@CtxClass2=user2 -user@CtxClass3=user3
アプリケーションで複数の接続コンテキスト・クラスを使用する場合、クラスを指定しない-user
設定は、DefaultContext
クラスのみでなく、-user
設定を指定しないすべてのクラスにも適用されます。通常は、異なる接続コンテキスト・クラスは、異なるSQLオブジェクト・セットに対して使用することを目的としているため、-user
設定は接続コンテキスト・クラスごとに指定することになります。
接続コンテキスト・クラスCtxClass1
、CtxClass2
およびCtxClass3
を宣言し、-user
を次のように設定した場合を想定します。
-user@CtxClass2=HR/password -user=bill/lion
CtxClass2
のインスタンスを使用しているアプリケーション内の文が、HR
スキーマと照合されます。DefaultContext
、CtxClass1
またはCtxClass3
のインスタンスを使用している文が、bill
スキーマと照合されます。
また、-user
オプションでオンライン・チェックを有効にした後で、特定の接続コンテキストのオンライン・チェックを無効化するには、その接続コンテキストに対して空のユーザー名で-user
オプションを設定します。たとえば、次のような設定があるとします。
-user@CtxClass2=
CtxClass2
のインスタンスである接続オプションを指定したSQLJ実行文に対するオンライン・セマンティクス・チェックが無効になります。
デフォルトの接続コンテキスト・クラスおよびユーザー名を指定しなかった接続コンテキスト・クラスのオンライン・セマンティクス・チェックを無効化するには、次のように指定します。
-user=
このオプションの一般的なコマンドライン構文は、次のとおりです。
-user<@conn_context_class>=username</password><@url>
次に例を示します。
-user=HR -user=HR/password -user=HR@jdbc:oracle:oci:@ -user=HR/password@jdbc:oracle:oci:@ -user= -user=URL.CONNECT -user@CtxClass=HR/password -user@CtxClass=
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.user<@conn _context_class>=username</password><@url>
次に例を示します。
sqlj.user=HR sqlj.user=HR/password sqlj.user=HR@jdbc:oracle:oci:@ sqlj.user=HR/password@jdbc:oracle:oci:@ sqlj.user= sqlj.user=URL.CONNECT sqlj.user@CtxClass=HR/password sqlj.user@CtxClass=
このオプションにはデフォルト値はありません。デフォルトでは、オンライン・セマンティクス・チェックはありません。
注意:
user
オプションと-url
オプションとでは、ユーザー、パスワードおよびURLを指定する書式が異なることに注意してください。-url
オプションでは、ユーザー名とパスワードをURLの一部としてJDBCドライバ・タイプの直後に指定します。-user
オプションでは、ユーザー名とパスワードを指定し、その後ろにURLを指定します。
オンライン・セマンティクス・チェック時のユーザー・パスワード(-password)
-password
オプションでは、オンライン・セマンティクス・チェック用のデータベース接続で使用するユーザー・パスワードを指定します。-password
値を有効にするには、-user
オプションも設定する必要があります。
-user
オプションの設定の一部として、パスワードも指定できます。パスワードを-user
オプションで指定済の場合は、接続コンテキスト・クラスに対して-password
オプションを使用しないでください(-userオプションの方が優先されます)。
-password
オプションの大半の機能は、-user
オプションの機能に相当します。つまり、アプリケーションでDefaultContext
のデフォルト接続などのインスタンスのみを使用する場合は、すべてのSQLJ文のチェックに使用するスキーマのパスワードを次のように指定します。
-password=password
CtxClass1
などの接続コンテキスト・クラスをさらに宣言して使用する場合は、これらの接続コンテキスト・クラスを使用する文をテストするために追加するスキーマを-user
オプションで指定できます。同様に、これらのスキーマのパスワードを次のように-password
オプションで指定できます。
-password@CtxClass1=password
接続コンテキスト・クラスのパスワードを-password
または-user
で設定しない場合は、デフォルトの接続コンテキスト・クラスのパスワード設定が使用されます。デフォルトの接続コンテキスト・クラスにパスワードを指定しない場合は、SQLJからパスワードの入力を求められます。また、ユーザー定義の接続コンテキスト・クラスにパスワードを設定していない場合も、同様にSQLJからパスワードの入力を求められます。ただし、ユーザー名にURL.CONNECT
を使用した場合は例外です。この場合、ユーザー名とパスワードは-url
で指定した文字列から特定されます。-password
オプションの設定は無視されます。
-password
オプションの設定値を無効にし、対話型プロンプトで入力を要求するには、プロパティ・ファイルなどで空のパスワードを設定します。次のように、DefaultContext
クラスまたは特定の接続コンテキスト・クラスに対して設定できます。
-password=
-password@CtxClass1=
実際に空のパスワードでログインするには、次のようにEMPTY.PASSWORD
を指定します。
-password=EMPTY.PASSWORD
-password@CtxClass2=EMPTY.PASSWORD
ただし、Oracle Database 12c リリース1 (12.1)では空のパスワードを使用できません。
注意:
-
コマンドラインで指定した-
p
は、-password
と同じものとして認識されます。 -
コマンドラインでパスワードを設定するときは、次のように
=
のかわりにスペースを使用できます。-password password -password@CtxClass password -p password -p@CtxClass password
-
ISOコード生成では、トランスレータの-
password
設定がプロファイル・カスタマイザに転送されますが、カスタマイザのpassword
設定によって無視されることもあります。
このオプションのコマンドライン構文は、次のとおりです。
-password<@conn_context_class>=user_password
次に例を示します。
-password=password -password= -password=EMPTY.PASSWORD -password@CtxClass=password
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.password<@conn_context_class>=user_password
次に例を示します。
sqlj.password=hr sqlj.password= sqlj.password=EMPTY.PASSWORD sqlj.password@CtxClass=hr
このオプションにはデフォルト値はありません。DefaultContext
のパスワードが使用されるか、ユーザーの入力を要求するプロンプトが表示されます。
オンライン・セマンティクス・チェックに使用する接続URL(-url)
-url
オプションでは、オンライン・セマンティクス・チェックのためのデータベース接続の確立に使用するURLを指定します。必要に応じて、ホスト名、ポート番号およびデータベースのサービス名(またはSID)をURLに指定できます(SIDは、Oracle Database 12c リリース1 (12.1)では非推奨です)。
-user
オプションの設定の一部として、URLを指定することも可能です。URLを-user
オプションで指定済の場合は、接続コンテキスト・クラスに対して-url
オプションを使用しないでください(-userオプションの方が優先されます)。
-url
オプションの大半の機能は、-user
オプションの機能に相当します。つまり、アプリケーションでDefaultContext
のデフォルト接続などのインスタンスのみを使用する場合は、すべてのSQLJ文のチェックのための接続に使用するURLを、次のように指定します。
-url=jdbc:oracle:oci:@
または、ホスト名、ポート番号およびサービス名を含める場合は、次のように指定します。
-url=jdbc:oracle:thin:@myhost:5221/myservice
URL設定の最初にjdbc:
が付かない場合、設定形式はhost
:
port
/
servicename
であると見なされます。この場合、デフォルトでは、設定の最初に次の接頭辞が自動的に付けられます。
jdbc:oracle:thin:@
-url
設定をlocalhost:5221/myservice
にすると、URLが自動的に次のようになります。
jdbc:oracle:thin:@localhost:5221/myservice
このデフォルトの動作を削除または変更するには、-default
-url
-prefix
オプションを使用します。
ユーザーおよびパスワードは、-user
および-password
設定ではなく、-url
設定でも指定できます。この場合は、次に示すように、-user
をURL.CONNECT
に設定します。
-url=jdbc:oracle:oci:HR/hr@ -user=URL.CONNECT
たとえばCtxClass1
など、追加の接続コンテキスト・クラスを宣言して使用する場合は、その接続コンテキスト・クラスを使用する文のテストのための、基本スキーマを追加指定します。次に示す例のように、これらのスキーマのURLは-url
オプションで指定できます。
-url@CtxClass1=jdbc:oracle:oci:@
-url
設定と-user
設定のいずれでもURLが設定されていない接続コンテキスト・クラスの場合は、デフォルトの接続コンテキスト・クラスに設定されているURLが使用されます。ただし、デフォルトのコンテキスト・クラスにURLが設定されていることを前提とします。
注意:
-
URLが設定されている接続コンテキスト・クラスには、ユーザー名も設定されていることが必要です。設定されていないと、オンライン・チェックが行われません。
-
コマンドラインでURLを設定するときは、次のように
=
のかわりにスペースを使用できます。-url
jdbc:oracle:oci:@
-url@CtxClassjdbc:oracle:oci:@
-
ISOコード生成では、トランスレータの-
url
設定がプロファイル・カスタマイザに転送されますが、カスタマイザのurl
設定によって無視されることもあります。
このオプションのコマンドライン構文は、次のとおりです。
-url<@conn_context_class>=URL
次に例を示します。
-url=jdbc:oracle:oci:@
-url=jdbc:oracle:thin:@hostname:5221/myservice
-url=jdbc:oracle:oci:HR/password@
-url=hostname:5221/myservice
-url@CtxClass=jdbc:oracle:oci:@
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.url<@conn_context_class>=URL
次に例を示します。
sqlj.url=jdbc:oracle:oci:@ sqlj.url=jdbc:oracle:thin:@hostname:5221/myservice sqlj.url=jdbc:oracle:oci:HR/hr@ sqlj.url=hostname:5221/myservice sqlj.url@CtxClass=jdbc:oracle:oci:@
次に、このオプションのデフォルト値を示します。
jdbc:oracle:oci:@
注意:
-user
オプションと-url
オプションとでは、ユーザー、パスワードおよびURLを指定する書式が異なることに注意してください。-url
オプションでは、ユーザー名とパスワードをURLの一部としてJDBCドライバ・タイプの直後に指定します。-user
オプションでは、ユーザー名とパスワードを指定し、その後ろにURLを指定します。
デフォルトのURL接頭辞(-default-url-prefix)
デフォルトの接頭辞を変更または削除するには、-default-url-prefix
オプションを使用します。URL設定の最初にjdbc:
が付いていない場合、デフォルトでは、次の接頭辞が自動的に付けられます。
jdbc:oracle:thin:@
このため、-user
と-url
のどちらのオプションでURLを設定する場合でも、省略表現を使用できます。データベースのホスト、ポートおよびサービス名のみ指定できます(SIDも指定できますが、非推奨です)。たとえば、次のようにURLを設定するとします。
-url=myhost:5221/myservice
-user=HR/hr@myhost:5221/myservice
デフォルトでは、URLが次のように解釈されます。
jdbc:oracle:thin:@myhost:5221/myservice
URLの指定がjdbc:
で開始される場合、デフォルトの接頭辞は使用されません。
ただし、たとえば、デフォルトのURL設定でJDBC ThinドライバのかわりにJDBC Oracle Call Interface(OCI)ドライバを使用するには、デフォルトの接頭辞を次のように設定します。
-default-url-prefix=jdbc:oracle:oci:@
接頭辞を付けないようにするには、次に示すように、-default
-url-prefix
オプションを空の文字列に設定します。
-default-url-prefix=
このオプションのコマンドライン構文は、次のとおりです。
-default-url-prefix=url_prefix
例
-default-url-prefix=jdbc:oracle:oci:@ -default-url-prefix=
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.default-url-prefix=url_prefix
次に例を示します。
sqlj.default-url-prefix=jdbc:oracle:oci:@ sqlj.default-url-prefix=
次に、このオプションのデフォルト値を示します。
jdbc:oracle:thin:@
オンライン・セマンティクス・チェックのために登録するJDBCドライバ(-driver)
-driver
オプションでは、オンライン・セマンティクス・チェックに使用するJDBC接続URLの解釈のために登録する、JDBCドライバ・クラスを指定します。このオプションを使用して、ドライバ・クラスまたはカンマで区切られたクラスのリストを指定します。デフォルトのOracleDriver
では、Oracle Database 12c リリース1 (12.1)でのOracle JDBC OCI、JDBC Thinおよびサーバー側JDBCドライバの使用がサポートされています。
このオプションのコマンドライン構文は、次のとおりです。
-driver=driver1<,driver2,driver3,...>
次に例を示します。
-driver=oracle.jdbc.OracleDriver -driver=oracle.jdbc.OracleDriver,sun.jdbc.odbc.JdbcOdbcDriver
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.driver=driver1<,driver2,driver3,...>
次に例を示します。
sqlj.driver=oracle.jdbc.OracleDriver sqlj.driver=oracle.jdbc.OracleDriver,sun.jdbc.odbc.JdbcOdbcDriver
次に、このオプションのデフォルト値を示します。
oracle.jdbc.OracleDriver
ドライバ名(sqlj.driver_name)
プロパティ・ファイルのsqlj.driver_name
オプションを使用して、ドライバ名を設定します。エンドツーエンドの診断にdriver_name
属性を設定できます。この属性の値は検証されません。この値は直接サーバーに渡され、V$SESSION_CONNECT_INFO
ビューおよびGV$SESSION_CONNECT_INFO
ビューのCLIENT_DRIVER
列の値として表示されます。この値の最大長は8文字です。
プロパティ・ファイルでこのプロパティを設定しない場合、このプロパティのデフォルトの値はSQLJです。次の方法でこのプロパティを設定できます。
sqlj.driver_name=MYDRIVER
注意:
この属性はプロパティ・ファイルからのみ設定でき、同等のコマンドライン・オプションはありません。
9.2.4 レポートと行マッピングのオプション
次に示す各オプションでは、SQLJがモニターする条件、リアルタイム・エラーとステータス・メッセージを生成するかどうか、およびトランスレータのエラー・メッセージに原因と処置の情報を含めるかどうかを指定します。
-
-warn
-
-status
-
-explain
次のオプションを使用すると、生成済のJava.class
ファイルから元の.sqlj
ソース・ファイルへの行マッピングができます。この行マッピングを行うと、ランタイム・エラーについて、元のソース・コードの該当箇所を確認できます。
-
-linemap
-
-jdblinemap
-jdblinemap
をSun社のjdb
デバッガで使用します。それ以外の場合は、-linemap
を使用します。
トランスレータからの警告(-warn)
SQLJトランスレータでは、変換時の状況に応じて、様々な警告や情報メッセージを表示できます。-warn
オプションは、どの警告およびメッセージを表示するか、つまりどの状況を監視して、どの状況を無視するかを指定する、一連のフラグで構成されます。このオプションに指定するフラグをすべて組み合せて、カンマ区切りの単一の文字列にする必要があります。
表9-3に、テストする状況、各状況に対するフラグ値true
およびfalse
の意味、フラグ値true
の意味、およびデフォルトの値を示します。
表9-3 SQLJの警告のテストとフラグ
テストおよびフラグ機能 | TRUE/FALSE値 |
---|---|
継承階層で宣言されたオブジェクト型のサブタイプの要件のテスト: |
|
データ精度のテスト: |
|
NULL化可能なデータの変換ロスのテスト: |
|
移植可能性のテスト: |
|
名前付きイテレータの厳密マッチングのテスト: |
|
変換時の情報メッセージ: |
|
警告のグローバルでの有効化または無効化: |
|
verbose/noverbose
フラグは、他のフラグとは異なった働きをします。このフラグによって、特定のテストが有効になることはありませんが、セマンティクス・チェックについての概要メッセージの出力が有効になります。
注意:
-warn
=
verbose
フラグと-status
フラグを混同しないでください。-status
フラグを有効にすると、変換、セマンティクス・チェック、コンパイルおよびプロファイルのカスタマイズ(使用している場合)など、SQLJ変換にかかわるすべての処理についての情報メッセージが、リアルタイムで提供されます。これに対して-warn
=
verbose
フラグでは、変換フェーズについてのみ、追加情報が提供されます。
グローバルなall
/none
フラグは、デフォルトの設定よりも優先されます。このフラグを使用するのは、すべてのフラグを有効化または無効化する場合、選択したフラグを有効化する前にすべてのフラグが無効であることを保証するために初期化する場合、または選択したフラグを無効にする前にすべてのフラグを有効化する場合です。
all
を設定すると、次のように指定した場合と同じ結果になります。
cast,precision,nulls,portable,strict,verbose
none
を設定すると、次のように指定した場合と同じ結果になります。
nocast,noprecision,nonulls,noportable,nostrict,noverbose
all
/none
のデフォルトはありません。個々のフラグのデフォルトのみがあります。
たとえば、次のように指定します。
-
次のシーケンスでは、
nulls
フラグのみが有効になります。-warn=none,nulls
-
次のシーケンスは
verbose
設定が無効にされるため、同じ結果になります。-warn=verbose,none,nulls
-
次のシーケンスでは、移植可能性フラグ以外のすべてが有効になります。
-warn=all,noportable
-
次のシーケンスは
nonulls
設定が無効にされるため、同じ結果になります。-warn=nonulls,all,noportable
all
/none
フラグの配置以外は、-warn
設定でのフラグの指定順序は重要ではありませんが、競合する設定の場合は別です。-warn
=
portable,noportable
など、競合が発生する場合は、最後(右端)の設定が使用されます。
プロパティ・ファイルとコマンドラインで別々に-warn
オプションを設定しても、両方の設定が受け付けられることはありません。最後の設定のみが処理されます。次の例では、-warn
=
portable
設定は無視されます。このフラグ、およびnulls/nonulls
以外のすべてのフラグは、それぞれのデフォルト設定に従って処理されます。
-warn=portable -warn=nonulls
注意:
キャスト、精度、NULL化可能性および厳密性の各テストは、オンライン・セマンティクス・チェックの一部であり、データベース接続が必要です。
このオプションのコマンドライン構文は、次のとおりです。
-warn=comma-delimited_list_of_flags
次に例を示します。
-warn=none,nulls,precision
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.warn=comma-delimited_list_of_flags
次に例を示します。
sqlj.warn=none,nulls,precision
次に、このオプションのデフォルト値を示します。
cast,precision,nulls,noportable,strict,noverbose
リアルタイムのステータス・メッセージ(-status)
-status
フラグを有効にすると、変換、セマンティクス・チェック、コンパイルおよびカスタマイズなど、すべてのSQLJ処理について追加のステータス・メッセージが表示されます。SQLJ操作の各ステージで各ファイルが処理されると、メッセージが表示されます。
注意:
-
-warn
=
verbose
フラグと-status
フラグを混同しないでください。-status
フラグでは、SQLJ変換にかかわるすべての処理についての情報メッセージが、リアルタイムで提供されます。これに対して-warn
=
verbose
フラグでは、変換フェーズについてのみ、追加情報が提供されます。 -
loadjava
ユーティリティとの互換性については、-v
がコマンドラインで指定されると、-status
に相当すると認識されます。
このオプションのコマンドライン構文は、次のとおりです。
-status<=true|false>
次に例を示します。
-status
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.status<=true|false>
次に例を示します。
sqlj.status
次に、このオプションのデフォルト値を示します。
false
トランスレータ・エラーの原因と処置(-explain)
-explain
フラグを有効にすると、SQLJトランスレータでエラーが最初に発生したときのみ、出力されるエラー・メッセージに原因および処置の情報がある場合は出力されます。
このオプションのコマンドライン構文は、次のとおりです。
-explain<=true|false>
次に例を示します。
-explain
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.explain<=true|false>
次に例を示します。
sqlj.explain
次に、このオプションのデフォルト値を示します。
false
SQLJソース・ファイルとの行マッピング(-linemap)
-linemap
フラグを有効にすると、SQLJソース・コード・ファイルの行番号が、対応する.class
ファイルの場所にマッピングされます。このファイルは、SQLJトランスレータで生成された.java
ファイルのコンパイルで生成される.class
ファイルになります。このマッピングにより、Javaランタイム・エラーが発生した場合に、SQLJソース・コードの行番号と同じ行番号がJVMによって報告され、デバッグがはるかに容易になります。
通常、.class
ファイル内の命令は、対応する.java
ファイル内のソース・コードの行にマッピングされます。ただし、生成された.java
ファイル内の行番号を元の.sqlj
ファイル内の行番号にマッピングする必要があるため、SQLJ開発者にはあまり役に立ちません。
SQLJトランスレータは、-linemap
オプションを実装するように、.class
ファイルを修正します。この修正では、生成された.java
ファイルの行番号とファイル名が、元の.sqlj
ファイルの対応する行番号とファイル名で置き換えられます。この処理を、クラス・ファイルのインストルメントと呼びます。
SQLJでこの処理を行う際には、次の設定が考慮されます。
-
.class
ファイルのルート・ディレクトリを決定する-d
オプション設定 -
生成された
.java
ファイルのルート・ディレクトリを決定する-dir
オプション設定
注意:
-
.sqlj
ファイルの処理でエラーのためにコンパイルが行われなかった場合は、マッピング用の.class
ファイルが生成されないため、行マッピングも行われません。 -
SQLJからJavaコンパイラが起動された場合、コンパイル・エラーの報告には、常に、元の
.sqlj
ソース・ファイルの行番号が使用され、生成された.java
ファイルは使用されません。このマッピングには、オプションの設定は必要ありません。 -
.sqlj
ファイル内の無名クラスは、インストルメントされません。 -
Sun社
jdb
デバッガを使用する際は、-linemap
オプションのかわりに、-jdblinemap
オプションを使用します。
このオプションのコマンドライン構文は、次のとおりです。
-linemap<=true|false>
次に例を示します。
-
linemap
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.linemap<=true|false>
次に例を示します。
sqlj.linemap
次に、このオプションのデフォルト値を示します。
false
jdbデバッガでのSQLJソース・ファイルへの行マッピング(-jdblinemap)
このオプションは-linemap
オプションと同等であり、Sun Microsystemsのjdb
デバッガを使用する場合は、-linemap
オプションではなく、このオプションを使用する必要があります。この理由は、jdb
からアクセスできるソース・ファイルが.java
ファイルという拡張子付きのものに限られているためです。
-jdblinemap
を設定すると、SQLJでは次の処理が行われます。
-
トランスレータで生成された
.java
ファイルの内容を、元の.sqlj
ファイルの内容で上書きします。 -
生成された
.class
ファイルの中にあるファイル名のうち、.sqlj
ファイル名でなく.java
ファイル名を保持します。
このためSQLJソース・コードからjdb
へのアクセスが可能になっています。
このオプションのコマンドライン構文は、次のとおりです。
-jdblinemap<=true|false>
次に例を示します。
-
jdblinemap
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.jdblinemap<=true|false>
次に例を示します。
sqlj.jdblinemap
次に、このオプションのデフォルト値を示します。
false
9.2.5 DMSのオプション
Oracle SQLJ実装では、DMSをサポートするためのトランスレータ・フロントエンド・オプションが提供されます。
-
-instrument
: インストルメントを有効にし、アプリケーション(変換するコンポーネントの集合)の名前を指定します。 -
-components
: インストルメントするコンポーネント(パッケージおよびクラス)を指定します。
DMSのためのインストルメント(-instrument)
SQLJの-instrument
オプションは、インストルメントを有効にし、アプリケーション名を指定するためのオプションです。ここでアプリケーションという用語は、SQLJコマンドラインで変換のために指定されたすべてのSQLJコンポーネントとJavaコンポーネントを指します。
使用可能な-instrument
オプションの設定を次に示します。
-
application_name
: インストルメントを有効にして指定したアプリケーション名を使用するには、必要に応じて、接頭辞としてパッケージ名をJavaの標準ドット区切り構文で指定します。パッケージ名とアプリケーション名の間にスラッシュ(/)を挿入します。スペースは挿入しません。 -
true
: インストルメントを有効にしてデフォルトのアプリケーション名defaultApp
を使用します。 -
false
(デフォルト): インストルメントを無効にします。
インストルメントが有効になっている場合、SQLJ DMSプロパティ・ファイルが作成されます。このファイルの名前および場所は、-instrument
の設定(カレント・ディレクトを基準とする)、パッケージ名、およびSQLJの-d
オプションの設定に従って指定されます。アプリケーション名を指定しない場合、true
が設定されている場合と同様に、プロパティ・ファイルはsqlmonitor.properties
という名前でカレント・ディレクトリに格納されます。
簡単な例として、-instrument
=
myapp
を設定すると、プロパティ・ファイルmyapp.properties
がカレント・ディレクトリに作成されます。
ここで、アプリケーション名がstock
、パッケージがcom.acme
の次の例を考えます。
% sqlj -instrument=com.acme/stock Stock.sqlj Trading.sqlj
この場合、プロパティ・ファイル./com/acme/stock.properties
が作成されます。
ここで、次の例について考えてみます。
% sqlj -instrument=com.acme/stock -d /home Stock.sqlj Trading.sqlj
この場合、-d
オプションが指定されているため、ファイル/home/com/acme/stock.properties
が作成されます。
次のようにsqlj.properties
に-instrument
オプションを設定することもできます。
sqlj.instrument=com.acme/stock
注意:
-instrument
の設定は、-instrument
=
true
を設定することと同じです。
このオプションのコマンドライン構文は、次のとおりです。
-instrument<=true|false|application_name>
次に例を示します。
-
instrument=com.acme/stock
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.instrument<=true|false|application_name>
次に例を示します。
sqlj.instrument=com.acme/stock
次に、このオプションのデフォルト値を示します。
false
DMSのためにインストルメントするコンポーネント(-components)
-instrument
オプションでインストルメントが有効になっている場合、-components
オプションを使用して、DMS監視のためにインストルメントするコンポーネントを指定します。これは、変換されるコンポーネントのサブセットであり、通常、これらのほぼすべてのコンポーネントで、実行時の柔軟な監視が可能になります。実行時に、インストルメントされたコンポーネントが、SQLJ DMSプロパティ・ファイル内の指定に従って監視されます。
変換時にインストルメントされていないコンポーネントは、プロパティ・ファイル内の指定にかかわらず、いずれも実行時に監視できないことに注意してください。
-components
オプションには、次のいずれかを設定できます。
-
list_of_components
: インストルメントするパッケージまたはクラスのカンマ区切りリスト -
all
(デフォルト): 変換されるすべてのコンポーネントをインストルメントする場合
コンポーネントのリストでは、Javaの標準ドット区切り構文を使用してクラスの完全修飾名を指定できます。または、パッケージ内のすべてのクラスをインストルメントするにはパッケージ名を指定します。
たとえば、Stock
およびTrading
クラスをインストルメントするには、次の構文を使用します。
% sqlj ... -components=com.acme.Stock,com.acme.Trading
または、sqlj.properties
ファイルに次の指定を行うことも結果は同じです。
sqlj.components=com.acme.Stock,com.acme.Trading
このオプションのコマンドライン構文は、次のとおりです。
-components=all|list_of_components
次に例を示します。
-
components=com.acme.Stock,com.acme.Trading
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.components=all|list_of_components
次に例を示します。
sqlj.components=com.acme.Stock,com.acme.Trading
次に、このオプションのデフォルト値を示します。
all
9.2.6 コード生成、最適化およびCHAR比較のオプション
デフォルトでは、Oracle SQLJ実装は、ISO標準コード生成のかわりにOracle固有コード生成を使用します(Oracle JDBCコードが直接生成されます)。Oracle固有コード生成の場合、プロファイルは生成されず、SQLJランタイムはコード実行時にほとんど省略されます。
プロファイルのカスタマイズはOracle固有コード生成には利用できないので、以前にOracleカスタマイザでのみ利用可能であった一般的に便利ないくつかの最適化オプションが、現在はSQLJトランスレータで直接利用できます。
WHERE
句のCHAR
比較で、列の空白埋めを考慮するオプションもあります。このオプションは、トランスレータ・オプション(Oracle固有コード生成の場合)としても、Oracleカスタマイザ・オプション(ISO標準コード生成の場合)としても使用できます。
ここでは、次のコード生成、最適化およびCHAR
比較およびバインドのオプションについて説明します。
-
-codegen
-
-optcols
-
-optparams
-
-optparamdefaults
-
-fixedchar
-
-ncharconv
コードの生成(-codegen)
Oracle SQLJ実装では、Oracle固有のJDBCコードを直接生成することも、SQLJランタイムをコールし、そこからJDBCをコールするISO標準コードを生成することもできます。Oracle固有コード生成の場合、プロファイル・ファイルはなく、SQLJランタイムはプログラム実行時にほとんど省略されます。
ISO規格に従ってコードを生成する場合は、次のようにSQLJトランスレータの-codegen
オプションを使用します。
-codegen=iso
デフォルトはOracle固有のSQLJコード生成です。次のようにOracle固有コード生成を明示的に指定することもできます。
-codegen=oracle
注意:
codegen
=iso
の場合、-user
、-password
、-url
、-optparams
、-optparamdefaults
および-fixedchar
のトランスレータ設定は、プロファイル・カスタマイザにも転送されます。ただし、カスタマイザ・オプションを直接設定することによって、これらのカスタマイズ設定(特に-user
、-password
および-url
)を無視できます。
このオプションのコマンドライン構文は、次のとおりです。
-codegen=iso|oracle
次に例を示します。
-
codegen=iso
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.codegen=iso|oracle
次に例を示します。
sqlj.codegen=iso
次に、このオプションのデフォルト値を示します。
oracle
列の定義(-optcols)
SQLJトランスレータの-optcols
フラグを使用して、イテレータまたは結果セット列の型およびサイズを決定するようにトランスレータに指示します。このようにすると、アプリケーション実行時に列をOracle JDBCドライバに登録可能になり、ドライバの実装にもよりますが、データベースへのラウンドトリップが減ります。特に、この方法は、JDBC Thinドライバと位置イテレータには効果的です。
関連項目:
注意:
このトランスレータ・オプションは、Oracleカスタマイザのoptcols
オプションと同じで、プロファイルがないデフォルトのOracle固有コード生成のために作成されたものです。しかし、ISO標準コード生成にも適用されます。この場合、トランスレータ・オプションを設定すると、同様にカスタマイザ・オプションも自動的に設定されます。
このフラグの有効化/無効化は、SQLJコマンドラインまたはプロパティ・ファイルで設定します。
このフラグをコマンドラインで有効にするには、次のようにします。
-optcols
または
-optcols=true
このフラグは、デフォルトでは無効になっていますが、明示的に無効化することも可能です。このフラグをコマンドラインで無効化するには、次のようにします。
-optcols=false
列定義には、問合せ対象の列を検証するためにデータベース接続が必要です。そのため、SQLJトランスレータの-user
、-password
および-url
オプションも適切に設定する必要があります。次に例を示します。
% sqlj -user=HR@jdbc:oracle:oci:@ -optcols MyApp.sqlj
Password: password
注意:
-
選択したすべての列に定義が作成されるため、必ずしも選択した列をすべて使用するわけではない場合は、SQL操作では
SELECT *
構文を使用せずに、使用する列を明示的に選択することをお薦めします。必要以上に列を選択すると、実行時エラーの可能性も高くなります。このことは、カスタマイズと実行時の間にその表を変更した場合、特に列定義をカスタマイズした場合に当てはまります。変換時にはSQLJ-warn
=strict
フラグを設定することをお薦めします。問合せで追加の(不要な)列が選択された場合に、警告が生成されます。 -
オブジェクトまたはコレクションが1つ以上含まれるイテレータや結果セットに対しては、列定義はできません。
-
データベース接続用ユーザー名、パスワードおよびURLを指定せずに、
-optcols
オプションを有効にすると、エラーが発生します。 -
実行時にはデータベースの接続先と同じスキーマまたはデータベースに、トランスレータから接続する必要はありません。ただし、実行時のエラーを回避するために、関連のある列と、型およびサイズが同じ列は同じ順序で並べる必要があります。
このオプションのコマンドライン構文は、次のとおりです。
-optcols<=true|false>
次に例を示します。
-optcols
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.optcols<=true|false>
次に例を示します。
sqlj.optcols
次に、このオプションのデフォルト値を示します。
false
パラメータの定義(-optparams)
パラメータ・サイズの定義を有効化するには、SQLJトランスレータの-optparams
フラグを使用します。SQLJではこのフラグを有効にすると、入力および出力パラメータが登録されて、JDBCリソース割当て量が指定したサイズに基づいて最適化されます。このサイズの優先順位は次のとおりです。
-
ソース・コードのヒント中に指定したサイズ(ある場合)
-
-optparamdefaults
オプション設定のデータ型に対して指定したデフォルトのサイズ
指定されたホスト変数用のソース・コードのヒントまたはデフォルトのデータ型サイズが設定されていない場合、リソース割当て量はJDBC次第になります。
関連項目:
注意:
このトランスレータ・オプションは、Oracleカスタマイザのoptparams
オプションと同じです。このトランスレータ・オプションは、プロファイルがないデフォルトのOracle固有コード生成のために作成されたものです。しかし、ISO標準コード生成にも適用されます。この場合、トランスレータ・オプションを設定すると、同様にカスタマイザ・オプションも自動的に設定されます。
-optparams
フラグの有効化/無効化は、コマンドラインまたはSQLJプロパティ・ファイルで設定します。
このフラグをコマンドラインで有効にするには、次のようにします。
-optparams
または
-optparams=true
このフラグは、デフォルトでは無効になっていますが、明示的に無効化することも可能です。このフラグをコマンドラインで無効化するには、次のようにします。
-optparams=false
注意:
-optcols
オプションとは異なり、-optparams
オプションではサイズを自分で指定できるので、データベース接続は不要です。
コマンドライン(-optparamdefaults
オプションの設定はここでは省略します)の例を次に示します。
% sqlj -optparams -optparamdefaults=defaults_string MyApp.sqlj
このオプションのコマンドライン構文は、次のとおりです。
-optparams<=true|false>
次に例を示します。
-optparams
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.optparams<=true|false>
次に例を示します。
sqlj.optparams
次に、このオプションのデフォルト値を示します。
false
パラメータのデフォルト・サイズ(-optparamdefaults)
-optparams
オプションを有効にしてパラメータ・サイズを設定した場合は、必要に応じて-optparamdefaults
オプションを使用してデータ型のデフォルト・サイズを設定します。-optparams
を有効にしない場合、-optparamdefaults
が設定されていても無視されます。
ホスト変数に、そのサイズを指定するためのソース・コード・ヒントがある場合、このオプションで設定された対応するデータ型のデフォルト・サイズよりもヒントの方が優先されます。特定のホスト変数に対してソース・コード・ヒントも、対応するデータ型のデフォルト・サイズも指定されていない場合、その変数のリソース割当て量は、-optparams
が有効でない場合と同様に、JDBCドライバによって決定されます。
-optparams
が有効化してあるときは常に-optparamdefaults
オプションを使用するのが一般的ですが、必須ではありません。-optparams
が有効化されていても、デフォルト・サイズが設定されていない場合は、ソース・コード・ヒント(ある場合)またはJDBCドライバに基づいてリソースが割り当てられます。
関連項目:
注意:
このトランスレータ・オプションは、Oracleカスタマイザのoptparamdefaults
オプションと同じです。このトランスレータ・オプションは、プロファイルがないデフォルトのOracle固有コード生成のために作成されたものです。しかし、ISO標準コード生成にも適用されます。この場合、トランスレータ・オプションを設定すると、同様にカスタマイザ・オプションも自動的に設定されます。
-optparamdefaults
フラグは、コマンドラインでもSQLJプロパティ・ファイルでも設定できます。
このフラグをコマンドラインで設定するには、次のようにします。
-optparamdefaults=datatype1(size1),datatype2(size2),...
サイズはすべてバイト単位になっています。空白文字は、含まれないようにしてください。NULLを設定するには、空のカッコを使用します。
たとえば、次のように指定すると、VARCHAR2
型で30バイト、RAW
型で1000バイトが設定され、またCHAR
型でのNULLのサイズ設定が指定されます。CHAR
データ型のどのホスト変数に対してもソース・コード・ヒントがない場合は、JDBCドライバによってリソースが割り当てられます。
-optparamdefaults=VARCHAR2(30),RAW(1000),CHAR()
-optparamdefaults
オプションでは、次のデータ型の名前が認識されます。
-
CHAR
-
VARCHAR
、VARCHAR2
(同義) -
LONG
、LONGVARCHAR
(同義) -
BINARY
、RAW
(同義) -
VARBINARY
-
LONGVARBINARY
、LONGRAW
(同義)
-optparamdefaults
オプションでは、次のグループ名とワイルドカードも認識されます。
-
CHAR_TYPE
には、CHAR
、VARCHAR
/VARCHAR2
およびLONG
/LONGVARCHAR
があります。 -
RAW_TYPE
には、BINARY
/RAW
、VARBINARY
およびLONGVARBINARY
/LONGRAW
があります。 -
パーセント記号(
%
)自体を指定した場合はデータ型として認識されるものがすべて表され、部分的な名前にパーセント記号を付加した場合はデータ型のサブセットが表されます。たとえば、VAR%
を指定すると、「VAR」で始まるすべてのデータ型が表されます。
-optparamdefaults
の設定値は、左から右へと処理されます。グループ名またはワイルドカードを使用すると、特定のデータ型に対するグループ設定を上書きできます。
次の例のようにすると、一般的なデフォルト・サイズとして50バイト分が設定され、その設定値が500バイト分のRAW型の設定値に置き換わり、さらに、そのRAW型のグループ設定値がVARBINARY
型のNULL設定に置き換わります(ソース・コード・ヒントのないホスト変数は、JDBCで処理されます)。
-optparamdefaults=%(50),RAW_TYPE(500),VARBINARY()
次にコマンドラインの例を示します。この例では、-optparams
も設定します。
% sqlj -optparams -optparamdefaults=CHAR_TYPE(50),RAW_TYPE(500),CHAR(10) MyApp.sqlj
注意:
実行時に、実際のサイズが登録されているパラメータのサイズを超えた場合は、実行時エラーが発生します。
このオプションのコマンドライン構文は、次のとおりです。
-optparamdefaults=defaults_string
次に例を示します。
-optparamdefaults=VAR%(50),LONG%(500),RAW_TYPE()
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.optparamdefaults=defaults_string
例
sqlj.optparamdefaults=VAR%(50),LONG%(500),RAW_TYPE()
次に、このオプションのデフォルト値を示します。
null
空白埋めを考慮したCHAR比較(-fixedchar)
WHERE
句の比較で文字列をバインドするときにCHAR
型のデータベース列の空白埋めを考慮するには、このフラグをtrue
に設定します。この比較方法では、たとえば、"mystring"と"mystring "は同等であるとみなされます。
この機能は、JDBCのsetFixedCHAR()
メソッド(埋込みを考慮するOracleの拡張機能)を使用します。標準JDBCのsetString()
メソッドは、空白埋めを考慮しません。
次に-fixedchar
の使用例を示します。
% sqlj -fixedchar MyProgram.sqlj AnotherProg.java ...
注意:
-
このトランスレータ・オプションは、Oracleカスタマイザの
fixedchar
オプションと同じです。このトランスレータ・オプションは、プロファイルがないデフォルトのOracle固有コード生成のために作成されたものです。しかし、ISO標準コード生成にも適用されます。この場合、トランスレータ・オプションを設定すると、同様にカスタマイザ・オプションも自動的に設定されます。 -
CHAR
列またはVARCHAR2
列の場合、Oracle SQL実装ではNULL
値と""値(空の文字列)は同じ意味です。ただし、""の文字列は挿入できますが、IS NULL
構文を使用せずに""の文字列を正しく比較することはできません。-fixedchar
機能を使用することは、この問題の解決にはなりません。
このオプションのコマンドライン構文は、次のとおりです。
-fixedchar<=true|false>
次に例を示します。
-fixedchar
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.fixedchar<=true|false>
次に例を示します。
sqlj.fixedchar
次に、このオプションのデフォルト値を示します。
false
NCHARバインド(-ncharconv)
String
ホスト変数を使用してNCHAR
列にバインドする場合には、このオプションを設定します。このオプションでは、CHAR列へのすべてのバインドに対して生成コードにSetFormOfUse
メソッドを使用する必要があることを指定します。次のようにこのオプションを指定してSQLJファイルを変換する必要があるとします。
% sqlj -ncharconv MyApp.sqlj AnotherApp.java ...
このオプションは、codegen=oracle
およびcodegen=iso
の両方でサポートされます。
注意:
-
-ncharconv
オプションを指定してSQLJファイルをコンパイルすると、codegen=oracle
の生成コードでsetFormOfUse
メソッドが使用されます。codegen=iso
の場合、このオプション情報は、バインドの実行時にSetFormOfUse
を内部的に使用するOracle SQLJランタイムに渡されます。 -
このトランスレータ・オプションは、Oracle Database 10g リリース2 (10.2)より前のデータベース・リリースでは使用できません。
このオプションのコマンドライン構文は、次のとおりです。
-ncharconv<=true|false>
次に例を示します。
-ncharconv
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.ncharconv<=true|false>
次に例を示します。
sqlj.ncharconv
次に、このオプションのデフォルト値を示します。
false
9.3 高度なトランスレータ・オプション
ここでは、SQLJを実行する際に指定できる、高度なフラグとオプションの構文および機能について説明し、JVM、JavaコンパイラまたはSQLJプロファイル・カスタマイザにオプションを渡す際に使用する接頭辞についても説明します。これらのオプションを使用すると、Oracle SQLJ実装の特殊な機能を実行できます。プロパティ・ファイルでも指定できるオプションの構文も示します。
この項の内容は次のとおりです。
9.3.1 オプション設定を他の実行可能プログラムに渡す接頭辞
Javaインタプリタ、JavaコンパイラおよびSQLJプロファイル・カスタマイザに渡すオプションには、それぞれ次のフラグが付けられます。
-
-J
(Javaインタプリタに渡すオプションに付きます。) -
-C
(Javaコンパイラに渡すオプションに付きます。) -
-P
(プロファイル・カスタマイザに渡すオプションに付きます。ISOコード生成の場合にのみ使用します。)
Java Virtual Machineに渡すオプション(-J)
SQLJを起動したJVMに渡すオプションをコマンドラインで指定する場合は、-J
接頭辞を付けます。この接頭辞は、JVMオプションの直前に指定し、接頭辞とオプションの間に空白は入れません。このJavaオプションは、-J
接頭辞が取り除かれた後に、sqlj
スクリプトによってJVMに渡されます。次に例を示します。
-J-Duser.language=ja
sqlj
スクリプトにより、-Duser.language=ja
引数は-J
接頭辞が削除された後でJVMに渡されます。Sun社のJDKでは、
-Duser.language=ja
フラグを指定すると、システム・プロパティuser.language
が値ja
(日本語)に設定されます。ただし、使用するJava実行可能ファイルに依存するフラグを使用すると、sqlj
スクリプトで解釈や動作の決定が行われない場合もあります。
プロパティ・ファイルはJVMの起動後に読み取られるため、プロパティ・ファイルからJVMにオプションを渡すことは不可能です。
注意:
-
プロパティ・ファイルを使用して、SQLJトランスレータが実行されているJVMにオプションを直接渡すことはできませんが、この目的に環境変数
SQLJ_OPTIONS
を使用することは可能です。一方、Javaコンパイラが実行されているJVMにオプションを渡す際は、プロパティ・ファイルがあればそれを使用します。 -
Javaプロパティ・ファイルには、JVMの
file.encoding
設定値を使用できません。プロパティ・ファイルでは、常に8859_1
エンコーディングを使用します。これは、特別なSQLJの機能ということではなく、一般的なJavaの機能です。ただし、Unicodeのエスケープ・シーケンスなら、プロパティ・ファイルで使用できます。エスケープ・シーケンスを決める際は、native2ascii
ユーティリティを使用することをお薦めします。
このオプションのコマンドライン構文は、次のとおりです。
-J-Java_option
次に例を示します。
-J-Duser.language=ja
Javaコンパイラに渡すオプション(-C)
sqlj
スクリプトから起動されたJavaコンパイラに渡すオプションには、-C
接頭辞を付けます。この接頭辞は、Javaコンパイラ・オプションの直前に指定し、接頭辞とオプションの間に空白は入れません。このコンパイラ・オプションは、-C
接頭辞が取り除かれた後に、sqlj
スクリプトによってJavaコンパイラに渡されます。次に例を示します。
-C-nowarn
sqlj
スクリプトにより、-nowarn
引数は-C
接頭辞が取り除かれた後でコンパイラに渡されます。
通常、コンパイラ・オプションは変更なしで渡されますが、値を伴うコンパイラ・オプションの設定に等号(=)を使用する場合(-bootclasspath
、
-extdirs
、-target
など)は、オプションがコンパイラに渡されるときに等号が削除されます。次の例を検討してください:
% sqlj -C-bootclasspath=/usr/local/packages/jdk6/jre/lib/rt.jar myfile.sqlj
Javaコンパイラがそれ自体のJVMで実行されている場合は、コンパイラ経由でオプションをJVMに渡すことができます。この操作を行うには、JVMオプションに
接頭辞の-C-J
を付けます。接頭辞とオプションの間に空白は入れません。次に例を示します。
-C-J-Duser.language=de
-C
接頭辞を使用するときは、次の制約を守ってください。
-
Javaコンパイラで処理された
.java
ファイルのエンコーディングの指定には、-C-encoding
を使用しないでください。かわりに、SQLJの-encoding
オプションを使用します(このオプションでは、SQLJで処理された.sqlj
ファイルのエンコーディング、およびSQLJで生成された.java
ファイルのエンコーディングを指定します)。このオプションはコンパイラにも渡されます。このオプションを使用すると、.sqlj
ファイルと.java
ファイルが同じエンコーディングを受け取ります。 -
.class
ファイル用の出力ディレクトリの指定には、-C-d
を使用しないでください。かわりに、SQLJの-d
オプションを使用します(このオプションでは、生成されたプロファイル・ファイル(.ser
)用の出力ディレクトリを指定します)。このオプションはJavaコンパイラにも渡されます。このオプションを使用すると、.class
ファイルと.ser
ファイルが同じディレクトリに置かれます。
注意:
-
コンパイラ・オプションを指定していても、コンパイルを無効化する(
-compile=false
)と、コンパイラ・オプションは無視されます。 -
コンパイラのヘルプ・オプション(
-help
がコンパイラでサポートされている場合は-C-help
)は、コマンドラインまたはSQLJ_OPTIONS
変数でのみ指定可能で、プロパティ・ファイルでは指定できません。SQLJの-help
オプションと同様に、変換は行われません。処理するファイルを指定しても実行されません。SQLJでは、ヘルプと変換の両方でなく、どちらか一方を実行することが前提となっています。
このオプションのコマンドライン構文は、次のとおりです。
-C-Java_compiler_option
次に例を示します。
-C-nowarn
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
compile.Java_compiler_option
次に例を示します。
compile.nowarn
プロファイル・カスタマイザに渡すオプション(-P)
カスタマイズ・フェーズ(ISO標準コード生成の場合のみ)では、sqlj
スクリプトにより、フロントエンドのカスタマイザ・ハーネスが起動されます。このカスタマイザ・ハーネスはカスタマイズ処理を調整し、特定のカスタマイザを実行します。カスタマイズのオプションには、次のように-P
接頭辞を付けます。
-
-P
のみを使用すると、どのカスタマイザにも適用される汎用的なオプションが、カスタマイザ・ハーネスに渡されます。 -
-P-C
を使用すると、ベンダー固有のオプションが、使用するカスタマイザに渡されます。
-P
接頭辞と-P-C
接頭辞は、カスタマイザ・オプションの直前に指定し、接頭辞とオプションの間に空白は入れません。カスタマイザ・オプションは、接頭辞が取り除かれた後で、sqlj
スクリプトによってプロファイル・カスタマイザにそのまま渡されます。
SQLJの-default-customizer
オプションで定義されたデフォルトのカスタマイザをオーバーライドする場合にも、-P
接頭辞を使用します。
-P-customizer=your_customizer_class
汎用的なカスタマイザ・オプションの例を示します。
-P-backup
-backup
フラグは、新しいカスタマイズ結果を生成する前に既存のカスタマイズ結果をバックアップする、汎用的なカスタマイザ・オプションです。
次に示すのは、ベンダー固有のカスタマイザ・オプションの例です(ここでは、Oracle固有のカスタマイザ・オプションを使用しています)。
-P-Csummary
summary
フラグは、実行されたカスタマイズの情報を出力する、Oracleカスタマイザ・オプションです。
注意:
-
-P-C
とベンダー固有のカスタマイザ・オプションの間には、ハイフンを挿入しません。その他の接頭辞、および接頭辞の組合せの場合は、接頭辞とオプションの間にハイフンを付けます。 -
カスタマイザのヘルプ・オプション(
-P-help
)は、コマンドラインまたはSQLJ_OPTIONS
変数でのみ指定可能で、プロパティ・ファイルでは指定できません。SQLJの-help
オプションと同様に、変換は行われません。処理するファイルを指定しても実行されません。SQLJでは、ヘルプと変換の両方でなく、どちらか一方を実行することが前提となっています。 -
ISOコード生成では、カスタマイズ・オプションを指定していても、
.sqlj
ファイルのカスタマイズを無効にする(また、コマンドラインに.ser
ファイルがない)と、カスタマイズ・オプションは無視されます。 -
デフォルトのOracle固有コード生成では、プロファイルが生成されずカスタマイズが実行されないため、接頭辞
-P
を使用できません。
このオプションのコマンドライン構文は、次のとおりです。
-P-<C>profile_customizer_option
次に例を示します。
-P-driver=oracle.jdbc.OracleDriver -P-Csummary
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
profile.<C>profile_customizer_option
次に例を示します。
profile.driver=oracle.jdbc.OracleDriver profile.Csummary
9.3.2 特殊処理のフラグ
通常、.sqlj
ファイルはSQLJトランスレータ、Javaコンパイラおよび(ISOコード生成の場合は)SQLJプロファイル・カスタマイザで処理されます。次のフラグはこの処理に制限を加えるもので、指定したプロセスを省略するようにSQLJの起動スクリプトに指示します。
-
-compile
-
-profile
ISOコード生成の場合、SQLJでは-ser2class
フラグを指定すると、シリアライズされたリソース(.ser
)ファイルのプロファイルが、カスタマイズ後にclassファイルに変換されます。
-checksource
フラグを指定すると、特定の状況のもとでSQLJの型解決が行われます。ソース・ファイルの他、classファイルやSQLJコマンドラインから指定したファイルが検査の対象となります。
-bind-by-identifier
フラグは、指定されたSQLJ文の中で複数回出現する同一のホスト変数を、単一のバインドとして処理することを指定します。
コンパイル・フラグ(-compile)
-compile
フラグでは、コンパイラによる.java
ファイルの処理が、有効または無効にされます。この設定は、生成された.java
ファイルとコマンドラインで指定された.java
ファイルの両方に適用されます。たとえば、javac
以外のコンパイラを使用して、.java
ファイルを後でコンパイルする場合、このフラグを使用すると便利です。フラグはデフォルトではtrue
です。false
に設定すると、コンパイルが無効になります。
-compile=false
を指定して.sqlj
ファイルを処理する場合は、必要に応じて、後でコンパイルおよびカスタマイズを行います。
-compile=false
を設定すると、-profile=false
も暗黙的に設定されます。つまり、-compile
がfalse
の場合は、コンパイルとカスタマイズの両方が省略されます。-compile=false
と-profile=true
を設定した場合、-profile
設定は無視されます。
注意:
型の解決のために.java
ファイルを参照する場合でも、-compile
をfalse
に設定する方が適切な場合があります。たとえば、.sqlj
ファイルの変換中に行われる型解決に1つ以上の.java
ファイルをコマンドラインで指定する場合、特定のコンパイラを使用してすべての.java
ファイルを後でコンパイルするには、この設定を行います。
ただし、-checksource
オプションは、SQLJコマンドラインでの解決に.java
ファイルを入力する必要性を排除することによって、型解決の処理を単純化できることに注意してください。
このオプションのコマンドライン構文は、次のとおりです。
-compile<=true|false>
次に例を示します。
-compile=false
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.compile<=true|false>
次に例を示します。
sqlj.
compile=false
次に、このオプションのデフォルト値を示します。
true
プロファイル・カスタマイズ・フラグ(-profile)
ISOコード生成の場合、-profile
フラグは、SQLJプロファイル・カスタマイザによって生成されたプロファイル・ファイル(.ser
)の処理を有効または無効にします。この設定は、SQLJトランスレータによって、現行のコマンドラインで指定した.sqlj
ファイルから生成された.ser
ファイルにのみ適用されます。コマンドラインで指定した、前に生成された.ser
ファイル(または.jar
ファイル)には適用されません。フラグはデフォルトではtrue
です。false
に設定すると、カスタマイズが無効になります。
このオプションは、コマンドラインで指定したファイルの-compile
オプションとは異なった働きをします。コマンドラインで指定された.ser
ファイルと.jar
ファイルは、-profile=false
を設定してもカスタマイズされます。これに対して、-compile=false
を設定すると、コマンドラインで指定された.java
ファイルはコンパイルされません。これは、.java
ファイルに対しては、行マッピングなどの他の操作を実行できるためです。コマンドラインで指定された.ser
ファイルや.jar
ファイルに対しては、他の操作を実行できません。
-profile=false
を指定して.sqlj
ファイルを処理する場合は、必要に応じて、後でカスタマイズを行います。
注意:
-
Oracleカスタマイザを変換処理で使用する場合は、アプリケーションの実行時にOracle SQLJランタイムおよびOracle JDBCドライバを必要としない場合は、
-profile=false
を指定します。または-default-customizer
オプションを使用して、デフォルト以外のカスタマイザを指定する方法もあります。カスタマイズを実行しないと、アプリケーション実行時に汎用SQLJランタイムが使用されます。 -
-compile=false
を設定すると、-profile=false
も暗黙的に設定されます。つまり、-compile
がfalse
の場合は、コンパイルとカスタマイズの両方が省略されます。-compile=false
と-profile=true
を設定した場合、-profile
設定は無視されます。 -
デフォルトのOracle固有コード生成では、プロファイルが生成されずカスタマイズが実行されないため、このオプションを使用できません。
このオプションのコマンドライン構文は、次のとおりです。
-profile<=true|false>
次に例を示します。
-profile=false
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.profile<=true|false>
次に例を示します。
sqlj.profile=false
次に、このオプションのデフォルト値を示します。
true
.serファイルから.classファイルへの変換(-ser2class)
ISO標準SQLJコード生成の場合、-ser2class
フラグでは、生成された.ser
ファイルが.class
ファイルに変換されます。末尾に.ser
の付くリソース・ファイル名がサポートされないブラウザから実行されるアプレットを、SQLJを使用して作成する場合、この処理が必要です。
また、クライアント側でSQLJプログラムを変換してから、クラス・ファイルとリソース・ファイルをサーバーにロードする場合、この処理を行うとプロファイル用のスキーマ・オブジェクトの名前付けが簡略化されます。ロード済のクラス・スキーマ・オブジェクトのネーミング規則は、ロード済のリソース・スキーマ・オブジェクトよりも簡略化されています。
プロファイルのカスタマイズ後に変換が行われ、独自のカスタマイズが取り込まれます。変換後のファイルのベース名は、元のファイルのベース名と同じになります。ファイル名の.ser
のみが.class
に置き換えられます。次の例を考えてみます。
Foo_SJProfile0.ser
このファイル名は次のファイル名に変換されます。
Foo_SJProfile0.class
注意:
-
元の
.ser
ファイルは保存されません。 -
プロファイルを
.class
ファイルに変換すると、これ以上はカスタマイズできなくなります。この場合は、.class
ファイルを削除し、SQLJを再度実行してプロファイルを再作成する必要があります。 -
文字エンコーディングが必要な場合、
-ser2class
オプションでは常に文字エンコーディング8859_1
が使用され、SQLJの-encoding
設定は無視されます。 -
デフォルトのOracle固有コード生成を使用する場合は、プロファイルが生成されないため、
-ser2class
オプションは適用されません。
このオプションのコマンドライン構文は、次のとおりです。
-ser2class<=true|false>
次に例を示します。
-ser2class
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.ser2class<=true|false>
例
sqlj.ser2class
次に、このオプションのデフォルト値を示します。
false
型解決を目的としたソース・チェック(-checksource)
CLASSPATH内のクラス・ファイルとSQLJコマンドラインで指定されたクラス・ファイルまたはソース・ファイルのみを検証するのでは、SQLJ型解決処理には十分ではありません。SQLJでは-checksource
フラグを使用すると、次の条件に該当する場合、CLASSPATH中にあるソース・ファイルも検査の対象になります。
-
要求されたクラスのクラス・ファイルは見つからないが、ソース・ファイルが見つかった場合
-
ソース・ファイルの修正日付が、対応するクラス・ファイルよりも新しい場合
注意:
この型解決が有効になるのは#sql
文に指定されているJava型のみであって、Javaコード中では有効になりません。このため、必要な.sqlj
ファイルの名前は、SQLJコマンドラインで明示的に指定する必要があります。
このオプションのコマンドライン構文は、次のとおりです。
-checksource<=true|false>
次に例を示します。
-checksource=false
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.checksource=
<=true|false>
次に例を示します。
sqlj.checksource=false
次に、このオプションのデフォルト値を示します。
true
識別子によるホスト式のバインド(-bind-by-identifier)
SQLJ標準と同様に、Oracle実装のデフォルトでは、同じホスト変数が複数回出現する場合でも、1文中の各ホスト変数のバインド参照には一意の名前を作成します。SQLJ標準はJDBCに基づいており、JDBCは同じ変数を異なる位置にバインドするようにはプロビジョニングされていません。各バインド位置(?
で識別)が個々の値にバインドされます。
このため、状況によっては、次の例のような場合にエラーが発生することがあります。
#sql emps = { SELECT substr(first_name, 1, :bind_var), sum(salary) FROM employees GROUP BY substr(first_name, 1, :bind_var) };
2つのbind_var
に対してバインド参照名が個別に作成されるため、実行時に結果がSQL例外となります。異なるバインド名が検出されると、SQLエンジンではGROUP BY
句がSELECT
構文のリストの一部ではないと判断します。
この問題を回避するために、Oracleでは、-bind-by-identifier
フラグを使用して標準機能が拡張されています。true
に設定されている場合は、指定されたSQLJ文またはPL/SQLブロック内に同じ識別子が複数回出現しても、単一のバインドとして処理されます。4つのバインド操作(:x
、:x
、:y
、:x
)が行われるSQLJ文は、:1
、:2
、:3
、:4
ではなく、:1
、:1
、:2
、:1
としてバインドされます。
前述の例で、双方のバインド操作は、substr(ename, 1, :1)
およびsubstr(ename, 1, :2)
ではなく、substr(ename, 1, :1)
となります。
注意:
-bind-by-identifier
フラグは、ホスト変数が単純なホスト式にのみ適用します。
このオプションのコマンドライン構文は、次のとおりです。
-bind-by-identifier<=true|false>
次に例を示します。
-bind-by-identifier
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.bind-by-identifier=
<=true|false>
次に例を示します。
sqlj.bind-by-identifier
次に、このオプションのデフォルト値を示します。
false
9.3.3 セマンティクス・チェックとオフライン解析のオプション
次の各オプションで、オンラインおよびオフラインのセマンティクス・チェックとオフライン解析を指定します。
-
-offline
-
-online
-
-cache
-
-parse
これらのオプションを説明する前に、次の2項目について説明します。
-
OracleChecker
(セマンティクス・チェックのデフォルトのフロントエンド・クラス)およびOracleのセマンティクス・チェッカ -
オンライン・セマンティクス・チェックとオフライン解析との比較
注意:
オンライン・セマンティクス・チェックは、トランスレータの-user
オプションを設定することによって有効になります。ただし、この設定は、オフライン解析を有効または無効にする-parse
オプションを設定することによって、オーバーライドできます。
セマンティクス・チェッカおよびOracleCheckerフロントエンド(デフォルトのチェッカ)
Oracleでは、Oracle専用のオフライン・チェッカ、汎用のオフライン・チェッカ、Oracle専用のオンライン・チェッカ、汎用のオンライン・チェッカが提供されています。汎用チェッカは、SQL-92エントリ・レベルおよびJDBCの標準機能のみを使用することを前提としています。Oracle Databaseを使用する場合は、Oracle専用チェッカを使用することをお薦めします。
デフォルトのチェッカは、オンライン・チェックおよびオフライン・チェックともoracle.sqlj.checker.OracleChecker
で、ほとんどの環境で十分に機能します。このクラスはフロントエンドとして機能し、使用する環境やオフラインとオンラインの選択に応じて、適切なセマンティクス・チェッカを実行します。
Oracleの場合は、オンライン・チェックおよびオフライン・チェックとも、Oracle 10g、Oracle9iおよびOracle8iタイプのOracle8チェッカ(対応するJDBC実装で使用)があります。
Oracle DatabaseとJDBCドライバによるオンライン・チェック
オンライン・チェックにOracle DatabaseとOracle JDBCドライバを使用する場合、データベースとJDBCドライバの低い方のバージョンにあわせて、OracleChecker
がチェッカを選択します。次の表に、データベースのバージョンとドライバのバージョンとの組合せと、他の有効なOracleチェッカを一覧の形式で示します。
表9-4 OracleCheckerで選択されるOracleオンライン・セマンティクス・チェッカ
データベースのリリース | JDBCのリリース | オンライン・チェッカの選択 | 他の有効なオンライン・チェッカ |
---|---|---|---|
Oracle Database 10g 、Oracle9i またはOracle8i |
Oracle11g |
Oracle8JdbcChecker |
Oracle8To7JdbcChecker |
JDBCドライバによるオフライン・チェック
オフライン・チェックにOracle JDBCドライバを使用する場合、JDBCドライバのバージョンにあわせて、OracleChecker
がチェッカを選択します。次の表に、可能な選択をまとめます。
表9-5 OracleCheckerで選択されるOracleオフライン・セマンティクス・チェッカ
JDBCのリリース | オフライン・チェッカの選択 | 他の有効なオフライン・チェッカ |
---|---|---|
Oracle11g |
Oracle8OfflineChecker |
なし |
オンライン・セマンティクス・チェックとオフライン解析
Oracle SQLJ実装は、オンライン・セマンティクス・チェックのかわりに限定的なチェックを提供する、オフライン解析と呼ばれる機能をサポートしています。オフライン解析はデータベース接続を使用しないため、データベース・スキーマに対する操作の検証は実行できませんが、SQL文とPL/SQL文すべての構文チェックを実行できます。(Oracle9iより前では、データベース接続なしで構文チェックを実行することはできません。)
次の表に、オフライン解析およびオンライン・セマンティクス・チェックで提供される機能の比較をまとめます。
表9-6 機能の比較: オフライン解析とオフライン・セマンティクス・チェック
機能 | オフライン解析 | オンライン・チェック |
---|---|---|
データ操作言語(DML)、SELECTおよびPL/SQL構文の検証 |
あり |
あり |
データ定義言語(DDL)構文の検証 |
あり |
なし |
DML、SELECTおよびPL/SQLセマンティクスの検証(データベース・スキーマとの比較) |
なし |
あり |
DDLセマンティクスの検証(データベース・スキーマとの比較) |
なし |
なし |
オンライン・チェックには、データベース・スキーマに対するSQLおよびPL/SQLの操作を検証できるという主なメリットがあります。オンライン・チェックでは、列の型がSQL操作と一致するかどうか、およびコールされたストアド・プロシージャが存在するかどうかの検証も行われます。それには、変換時にデータベース接続が必要になりますが、状況によっては、これが問題の原因となる場合があります。DDL操作の検証は行われません。
オフライン解析には、変換時にデータベースに接続せずにSQL構文をチェックできるメリットがあります。この構文チェックではDDL操作の検証も行われます。
いずれのモードでも、データベース・スキーマに対するDDLセマンティクス・チェックは行われません。
注意:
-
オフライン解析とオンライン・チェックの両方が有効化されている場合、一部の種類のエラーは2回レポートされます。
-
オフライン・パーサーまたはオンライン・チェッカによって検出される問題は、致命的なレベルではなく警告レベルまたは助言レベルでレポートされます。
-
オフライン解析とオフライン・セマンティクス・チェックを混同しないでください。オフライン・チェックは、オンライン・チェックが有効かどうか、およびオフライン解析が有効かどうかに関係なく、常に実行される基本的なセマンティクス・チェック手順で構成されます。この処理には、SQLJ実行文で使用されているJava式の型の分析や、
SELECT
などのキーワードに基づいた、埋込みSQL操作の分類などがあります。 -
弱い型指定のホスト式に対するデータの互換性はチェックされません。
-
PL/SQLの無名ブロック内で使用されている式のモード互換性はチェックされません。
オフライン・セマンティクス・チェッカ(-offline)
-offline
オプションには、オフライン・チェックのための、SQLJのセマンティクス・チェック・コンポーネントを実装したJavaクラスを指定します。オフライン・チェックでは、データベース接続がありません。SQL構文およびJava型の使用方法のみがチェックされます。-offline
オプションでオフライン・チェックが有効または無効になることはありません。オンライン・チェックが有効になっていないため、またはデータベース接続を確立できないために、オンライン・チェックが実行されない場合にのみ、オフライン・チェックが実行されます。
異なる接続コンテキストごとに異なるオフライン・チェッカを指定できますが、1つのコンテキストにつき1つのチェッカに制限されています。1つの接続コンテキストに複数のオフライン・チェッカを指定しないでください。通常は、フロントエンド・クラスである、デフォルトのOracleChecker
を使用できますが、OracleChecker
で選択されない特定のチェッカを指定する場合は別です。
次の例は、特定の接続コンテキスト(CtxClass
)をチェックするためにOracle8のオフライン・チェッカを選択する方法を示しています。
-offline@CtxClass=oracle.sqlj.checker.Oracle8OfflineChecker
この例では、SQLJでoracle.sqlj.checker.Oracle8OfflineChecker
が使用され、CtxClass
インスタンスである接続オブジェクトを指定するSQLJ実行文について、オフライン・チェックが行われます。
接続コンテキスト・クラスCtxClass
は、ソース・コード中に宣言するか、あらかじめ.class
ファイルにコンパイルしておく必要があります。(詳細は、「接続コンテキスト」を参照してください。)
-offline
オプションは、接続コンテキストのオフライン・チェッカごとに個別に設定します。これらの接続コンテキストの設定が相互に影響し合うことはありません。次に例を示します。
-offline@CtxClass2=oracle.sqlj.checker.Oracle8OfflineChecker -offline@CtxClass3=sqlj.semantics.OfflineChecker
デフォルトの接続コンテキスト、およびオフライン・チェッカを指定しない他の接続コンテキストに対してオフライン・チェッカを指定するには、次のようにします。
-offline=oracle.sqlj.checker.Oracle8OfflineChecker
オフライン・チェッカが指定されていない接続コンテキストでは、デフォルトの接続コンテキストのオフライン・チェッカ設定が使用されます。ここでは、オフライン・チェッカがデフォルトのコンテキストに設定されていることを前提とします。
このオプションのコマンドライン構文は、次のとおりです。
-offline<@conn_context_class>=checker_class
次に例を示します。
-offline=oracle.sqlj.checker.Oracle8OfflineChecker -offline@CtxClass=oracle.sqlj.checker.Oracle8OfflineChecker
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.offline<@conn_context_class>=checker_class
次に例を示します。
sqlj.offline=oracle.sqlj.checker.Oracle8OfflineChecker sqlj.offline@CtxClass=oracle.sqlj.checker.Oracle8OfflineChecker
次に、このオプションのデフォルト値を示します。
oracle.sqlj.checker.OracleChecker
オンライン・セマンティクス・チェッカ(-online)
-online
オプションには、SQLJのオンライン・セマンティクス・チェック・コンポーネントを実装したJavaクラスまたはクラスのリストを指定します。この処理では、データベースへの接続が行われます。オンライン・チェックは、-online
オプションでは有効になりません。-user
オプションを使用して有効にする必要があります。-password
、-url
および-driver
の各オプションも、適切に設定されていることが必要です。
注意:
SQLJの-parse
オプションの設定によっては、-user
オプションの効果が無視され、オンライン・セマンティクス・チェックも無効になります。
異なる接続コンテキストごとに異なるオンライン・チェッカを指定することも、1つのコンテキストに複数のチェッカを指定することも可能です(カンマ区切りで指定します)。1つのコンテキストに複数のチェッカを指定した場合、SQLJは(リストの左から右に向かって)最初に指定されているチェッカを使用します。このチェッカは、オンライン・チェック用に確立されたデータベース接続を受け入れます。分析時に接続が各オンライン・チェッカに渡され、チェッカはデータベースを認識したかどうかを確認します。
通常は、フロントエンド・クラスである、デフォルトのOracleChecker
を使用できますが、OracleChecker
で選択されない特定のチェッカを指定する場合は別です。
次の例では、DefaultContext
クラスおよび設定値を指定していない接続コンテキスト・クラスをチェックするために、Oracle8のオンライン・チェッカを選択します。
-online=oracle.sqlj.checker.Oracle8JdbcChecker
ドライバのリストを指定し、アクセスしているデータベースの種類に応じて適切なクラスが選択されるようにするには、次のように指定します。
-online=oracle.sqlj.checker.Oracle8JdbcChecker,sqlj.semantics.JdbcChecker
このように指定した場合、Oracle Databaseに接続した後でoracle.sqlj.checker.Oracle8JdbcChecker
セマンティクス・チェッカが使用されます。他の種類のデータベースへの接続が行われた場合は、汎用的なsqlj.semantics.JdbcChecker
セマンティクス・チェッカが使用されます。これは、デフォルトのOracleChecker
と類似する機能です。
特定の接続コンテキスト(CtxClass
)用にオンライン・チェッカを指定するには、次のようにします。
-online@CtxClass=oracle.sqlj.checker.Oracle8JdbcChecker
この例では、oracle.sqlj.checker.Oracle8JdbcChecker
が使用され、CtxClass
のインスタンスである接続オブジェクトを指定するSQLJ実行文に対して、オンライン・チェックが行われます。ここでは、CtxClass
に対するオンライン・チェックが有効になっていることを前提としています。
接続コンテキスト・クラスCtxClass
は、ソース・コード中に宣言するか、あらかじめ.class
ファイルにコンパイルしておく必要があります。
-online
オプションは、各接続コンテキストのオンライン・チェッカごとに設定します。これらの設定は互いに影響しません。
-online@CtxClass2=oracle.sqlj.checker.Oracle8JdbcChecker -online@CtxClass3=sqlj.semantics.JdbcChecker
オンライン・チェッカを設定していない接続コンテキストは、デフォルトの接続コンテキストのオンライン・チェッカ設定を使用します。
このオプションのコマンドライン構文は、次のとおりです。
-online<@conn_context_class>=checker_class(list)
次に例を示します。
-online=oracle.sqlj.checker.Oracle8JdbcChecker -online=oracle.sqlj.checker.Oracle8JdbcChecker,sqlj.semantics.JdbcChecker -online@CtxClass=oracle.sqlj.checker.Oracle8JdbcChecker
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.online<@conn_context_class>=checker_class(list)
次に例を示します。
sqlj.online=oracle.sqlj.checker.Oracle8JdbcChecker sqlj.online=oracle.sqlj.checker.Oracle8JdbcChecker,sqlj.semantics.JdbcChecker sqlj.online@CtxClass=oracle.sqlj.checker.Oracle8JdbcChecker
次に、このオプションのデフォルト値を示します。
oracle.sqlj.checker.OracleChecker
オンライン・セマンティクス・チェッカ実行結果のキャッシング(-cache)
-cache
オプションを使用すると、オンライン・チェッカで生成された結果のキャッシングが有効になります。これによって、以後のSQLJ変換実行時に、その他のデータベース接続が確立されることはなくなります。分析結果は、カレント・ディレクトリに格納してあるSQLChecker.cache
ファイル中にキャッシングされます。キャッシュには、正常に変換された(エラー・メッセージまたは警告メッセージなしで変換された)SQL文すべてが、シリアライズされて格納されますが、それには文のパラメータ、戻り型、トランスレータ設定およびモードがすべて含まれます。
キャッシュは累積し、SQLJトランスレータが起動されるたびに増大します。キャッシュを空にするには、SQLChecker.cache
ファイルを削除します。
このオプションのコマンドライン構文は、次のとおりです。
-cache<=true|false>
次に例を示します。
-cache
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.cache<=true|false>
次に例を示します。
sqlj.cache
次に、このオプションのデフォルト値を示します。
false
オフライン・パーサー(-parse)
-parse
オプションを使用してオフライン解析を有効化します。オフライン解析は、オンライン・セマンティクス・チェックを補完し、変換時にデータベースに接続せずにSQLおよびPL/SQLの構文チェックを実行します(スキーマに対する検証は実行しません)。オフライン解析では、オンライン・チェックでは実行されないDDL文の構文もチェックされます。
また、-parse
オプションの設定は、-user
オプションによって有効になるオンライン・チェックよりも優先されます。使用可能な-parse
設定は、次のとおりです。
-
both
(デフォルト): オフライン・パーサーとオンライン・チェックを有効にします。この場合、オンライン・チェックは、-user
オプションによって判断されます。 -
online-only
: オフライン・パーサーを無効にし、オンライン・チェックを有効にします。この場合もオンライン・チェックは、-user
オプションによって判断されます。 -
offline-only
: オフライン・パーサーを有効にし、オンライン・チェックを無効にします。この設定によって、オンライン・チェックを有効にする-user
オプションは無視されます。 -
none
: オフライン・パーサーとオンライン・チェックを無効にします。この設定によっても、オンライン・チェックを有効にする-user
オプションは無視されます。 -
parserclassname
: 代替SQLパーサーを実装するJavaクラス名を指定します。このクラスはsqlj.framework.checker.SimpleChecker
インタフェースを実装する必要があります。この設定によって指定パーサーが有効になり、SQLチェックに使用されるパーサーは、このパーサーのみになります。標準のオフライン・パーサーとオンライン・チェックは、両方とも無効になります。
将来: SimpleCheckerインタフェースについて記載します。
offline-only
とnone
の設定は完全性のために提供されており、通常の操作モードではありません。-user
オプションでオンライン・チェックを判断することをお薦めします。ユーザー独自のパーサーも一般的には指定しません。
注意:
オフライン解析とオンライン・チェックの両方を有効にするモードでは、一部の問題が重複してレポートされることがあります。
このオプションのコマンドライン構文は、次のとおりです。
-parse=both|online-only|offline-only|none|parserclassname
次に例を示します。
-parse=online-only
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.parse=both|online-only|offline-only|none|parserclassname
次に例を示します。
sqlj.parse=online-only
次に、このオプションのデフォルト値を示します。
both
9.4 トランスレータによる代替環境のサポートとオプション
デフォルトでは、Oracle Database 12cリリース1 (12.1) SQLJ実装は標準JDK 6下で実行し、標準コンパイラjavac
を使用するように構成されています。ただし、これらは必須条件ではありません。SQLJは、他のJVMやコンパイラで機能するように設定することも可能です。この設定を行うには、SQLJで次の情報を指定する必要があります。
-
使用するJVMの名前(
-vm
オプション) -
使用するJavaコンパイラの名前(
-compiler-executable
オプション) -
コンパイラで必要な設定
この情報を指定する際には、一連のSQLJオプションを使用できます。また、デフォルトの設定では、SQLJでOracleプロファイル・カスタマイザが使用されますが、他のカスタマイザを指定することも可能です。
注意:
使用するオペレーティング・システムおよび環境による制限事項に注意してください。特に、完成し、展開されたSQLJコマンドラインのサイズが、許容されるコマンドラインの最大値サイズを超えないようにしてください。使用するオペレーティング・システムのドキュメントを参照してください。
この項の内容は次のとおりです。
9.4.1 Javaおよびコンパイラのオプション
次の各オプションは、JVMおよびJavaコンパイラの操作を指定するオプションです。
-
-vm
(JVMを指定。コマンドラインのみ。) -
-compiler-executable
(Javaコンパイラを指定。) -
-compiler-encoding-flag
-
-compiler-output-file
-
-compiler-pipe-output-flag
標準javac
をはじめとする一部のコンパイラでは、定義済のPublicクラスがあれば、それと同じ名前をJavaソース・ファイル名に付ける必要があります。このため、SQLJトランスレータではこの要件を満たしているかどうかがデフォルトで検証されます。SQLJでこうした検証が実行されないように指定する場合は、-checkfilename
オプションを使用します。
JVMやコンパイラの設定によっては、SQLJでコンパイラを起動する通常の方法で、問題が発生する可能性があります。こうした問題を回避するには、-passes
オプションを使用して、SQLJでの処理を2段階で実行します。-J
および-C
接頭辞を指定すると、使用するJVMやコンパイラにオプションを直接渡すことが可能になります。
注意:
-vm
オプション、-passes
オプションおよび接頭辞-J
は、プロパティ・ファイルでは使用できません。これらはコマンドラインで設定する方法も、より簡単に環境変数SQLJ_OPTIONS
で設定する方法もあります。
Java Virtual Machineの名前(-vm)
SQLJで使用される特定のJVMを指定する場合は、-vm
オプションを使用します。それ以外の場合は、Sun MicrosystemsのJDKの標準のjava
が使用されます。プロパティ・ファイルはJVMの起動後に読み取られるため、プロパティ・ファイルでこのオプションを設定することは不可能です。
SQLJでは、JVMの実行可能ファイル名と一緒にディレクトリ・パスを指定しないと、オペレーティング・システムのPATH
変数に基づいて実行可能ファイルの検索が開始されます。
注意:
このオプションの特殊な機能として-vm=echo
がサポートされています。これは-n
オプションに相当するもので、sqlj
スクリプトは、SQLJトランスレータに渡されるコマンドライン全体を作成し、トランスレータでは実行しないでユーザーにエコーするように指示されます。
このオプションのコマンドライン構文は、次のとおりです。
-vm=JVM_path+name
次に例を示します。
-vm=/myjavadir/myjavavm
デフォルト値は次のとおりです。
java
Javaコンパイラの名前(-compiler-executable)
SQLJで特定のJavaコンパイラを使用する場合は、-compiler-executable
オプションで指定します。それ以外の場合は、Sun社のJDKの標準のjavac
が使用されます。
SQLJでは、コンパイラの実行可能ファイル名と一緒にディレクトリ・パスを指定しないと、オペレーティング・システムのPATH
変数に基づいて実行可能ファイルの検索が開始されます。
-
標準の出力デバイス(UNIXシステムの
STDOUT
など)、または-compiler-output-file
オプションで指定するファイルに、エラー情報およびステータス情報を出力できること。 -
クラス・ファイルのルート・ディレクトリを決定するSQLJの
-d
オプションを認識できること。 -
コンパイラ・エラーが発生するたびに、0(ゼロ)以外の終了コードを戻り値としてオペレーティング・システムに戻すこと。
-
エラーやメッセージで示す行情報が、次のいずれかの形式であること(
<>
内の項目はオプションです)。-
Sun社
javac
形式filename.java:line<.column><-line<.column>>
例:
myfile.java:15: Illegal character: '\u01234'
-
Microsoft社
jvc
形式filename.java(line,column)
例:
myfile.java(15,7) Illegal character: '\u01234'
-
SQLJでは、コンパイラの行情報が、生成された.java
ファイルではなくオリジナルの.sqlj
ファイルの行番号を使用するように処理されます。
注意:
-encoding
オプションがサポートされていないコンパイラの場合は、-compiler-encoding-flag
を無効化してください。
このオプションのコマンドライン構文は、次のとおりです。
-compiler-executable=Java_compiler_path+name
次に例を示します。
-compiler-executable=/myjavadir/myjavac
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.compiler-executable=Java_compiler_path+name
次に例を示します。
sqlj.compiler-executable=myjavac
デフォルト値は次のとおりです。
javac
コンパイラが使用する文字エンコーディング(-compiler-encoding-flag)
-encoding
オプションを使用して、SQLJで使用する文字エンコーディングを指定すると、SQLJはこの指定をJavaコンパイラに渡します。SQLJがコンパイラに文字エンコーディングの指定を渡さないようにするには、-compiler-encoding-flag
をfalse
に設定します。たとえば、javac
以外のコンパイラを使用し、そのコンパイラが-encoding
オプションをその名前ではサポートしていないとき、この設定が必要です。
このオプションのコマンドライン構文は、次のとおりです。
-compiler-encoding-flag<=true|false>
次に例を示します。
-compiler-encoding-flag=false
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.compiler-encoding-flag<=true|false>
次に例を示します。
sqlj.compiler-encoding-flag=false
デフォルト値は次のとおりです。
true
コンパイラの出力ファイル(-compiler-output-file)
Javaコンパイラがその結果をファイルに書き込むようにする場合は、-compiler-output-file
オプションを使用して、SQLJにファイル名を通知します。この操作を行わない場合、SQLJでは、コンパイラが結果を標準の出力デバイス(UNIXシステムのSTDOUT
など)に書き込むものと見なされます。絶対パスまたはカレント・ディレクトリからの相対パスは、必要に応じて指定してください。
注意:
-passes
を有効にする場合は、このオプションを使用できません。この場合は、STDOUT
に出力されることが必要です。
このオプションのコマンドライン構文は、次のとおりです。
-compiler-output-file=output_file_path+name
次に例を示します。
-compiler-output-file=/myjavadir/mycmploutput
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.compiler-output-file=output_file_path+name
次に例を示します。
sqlj.compiler-output-file=/myjavadir/mycmploutput
このオプションにはデフォルト値はありません。
コンパイラ・メッセージの出力パイプ(-compiler-pipe-output-flag)
注意:
このオプションは、JDK 1.2.xにのみ使用されます。
デフォルトでは、Javaコンパイラはエラーおよびメッセージの出力をSTDERR
に書き込みます。ただし、Javaコンパイラからのエラー・メッセージも、-compiler-output-file
オプションで指定した同じファイルにリダイレクトする必要がある場合は、このフラグをtrueに設定します。このオプションは、-compiler-output-file
と併用する場合にのみ有効です。
SQLJにより、javac.pipe.output
システム・プロパティがtrue
に設定される(SQLJがJavaコンパイラを起動した場合のデフォルト動作)と、コンパイラ・エラーおよびメッセージ出力はSTDOUT
に送信されます。ただし、-compiler-pipe-output-flag=false
を指定して、Javaコンパイラの起動時にこのシステム・プロパティを設定しないように、SQLJに指示できます。これは、使用するJavaコンパイラでjavac.pipe.output
システム・プロパティがサポートされていない場合などに実行する必要があります。
このフラグの設定は、コマンドラインまたはSQLJ_OPTIONS
環境変数のみでなく、プロパティ・ファイルでも行えます。
注意:
Sun社に由来し、デフォルトで出力がSTDERR
に書き込まれるJavaコンパイラでは、-passes
を有効にした場合、STDOUT
への出力が必要となるため、-compiler-pipe-output-flag
を有効のままにしておく必要があります。
このオプションのコマンドライン構文は、次のとおりです。
-compiler-pipe-outflag=<true|false>
たとえば、MyDemo.sqlj
というファイルのコンパイル時に、このファイルに関するJavaコンパイラ・メッセージおよびエラー・メッセージを同じファイルにリダイレクトする場合、次の構文を使用する必要があります。
sqlj -compiler-output-file=/myjavadir/mycmploutput -compiler-pipe-output-flag=true MyDemo.sqlj
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.compiler-pipe-output-flag<=true|false>
デフォルト値は次のとおりです。
true
注意:
このフラグがfalseに設定されている場合、Javaコンパイラからのエラー・メッセージはSTDERR
に送られます。
ソース・ファイル名のチェック(-checkfilename)
ソース・ファイル名は、定義済のPublicクラス名と同一にするか、Publicクラスが未定義の場合は、最初に定義されているクラス名と同一にすることをお薦めします。たとえば、MyPublicClass.sqlj
ソース・ファイル中には、PublicクラスMyPublicClass
が定義してあることが望まれます。
SQLJソース・ファイル名が、ファイル中の定義済Publicクラス名(ある場合)と同じかどうかの検証は、-checkfilename
フラグで要否を指定します。標準javac
のような一部のコンパイラでは、このことが必要になりますが、そうでないコンパイラもあります。
コードの移植性を最大限に高めるには、このフラグを有効にしておく必要があります(デフォルトで有効になります)。
注意:
サーバー側での変換にはネーミング要件が伴わないため、-checkfilename
オプションは不要であり、トランスレータによる名前のチェックも実行されません。
このオプションのコマンドライン構文は、次のとおりです。
-checkfilename<=true|false>
次に例を示します。
-checkfilename=false
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.checkfilename<=true|false>
次に例を示します。
sqlj.checkfilename=false
デフォルト値は次のとおりです。
true
SQLJでの2段階による実行(-passes)
デフォルトでは、sqlj
スクリプトを実行すると、次に示す処理が展開されます。
-
sqlj
スクリプトによってJVMが起動され、SQLJトランスレータが実行されます。 -
トランスレータによって、セマンティクス・チェックおよび
.sqlj
ファイルの変換が行われ、変換された.java
ファイルが生成されます。 -
トランスレータによってJavaコンパイラが起動され、生成済の
.java
ファイルがコンパイルされます。 -
トランスレータによって、コンパイラの出力が処理されます。
-
プロファイル・ファイルが生成されていなければ、トランスレータはプロファイル・カスタマイザを起動し、カスタマイズを実行します。
ただし、JVMとコンパイラの設定によっては、手順3でコンパイラが起動されないために変換が一時停止する場合もあります。
この場合は、SQLJが2段階で実行され、その間にコンパイル処理が行われるように指定します。これを行うには、2段階による実行を指定するフラグを有効にする必要があります。
-passes
-passes
オプションは、コマンドラインまたは環境変数SQLJ_OPTIONS
で指定します。プロパティ・ファイルでは指定できません。
注意:
-
-passes
を有効にする場合は、コンパイラの出力がSTDOUT
に書き込まれることが必要です。そのため、-compiler-pipe-output-flag
は有効のままにしておきます。デフォルトでは有効になります。また、-compiler-output-file
オプションは使用できません。使用すると、出力がSTDOUT
ではなくファイルに書き込まれます。 -
他のコマンドライン専用フラグ(
-help
、-version
、-n
)と同じように、-passes
フラグには、=true
構文を使用できません。
-passes
を有効にした場合、sqlj
スクリプトを実行すると、次に示す処理が展開されます。
-
sqlj
スクリプトによってJVMが起動された後で、SQLJトランスレータでの1段階目の処理が実行されます。 -
トランスレータによって、セマンティクス・チェックおよび
.sqlj
ファイルの変換が行われ、変換された.java
ファイルが生成されます。 -
JVMを終了します。
-
sqlj
スクリプトによって、Javaコンパイラが起動され、生成済の.java
ファイルがこのコンパイラでコンパイルされます。 -
sqlj
スクリプトによってJVMが再び起動された後で、SQLJトランスレータでの2段階目の処理が実行されます。 -
トランスレータによって、コンパイラの出力が処理されます。
-
プロファイル・ファイルが生成されていなければ、JVMはプロファイル・カスタマイザを起動し、カスタマイズを実行します。
この手順では、JVMがJavaコンパイラを起動する際に発生する問題が回避されます。
このオプションのコマンドライン構文は、次のとおりです。
-passes
次に例を示します。
-passes
デフォルト値は次のとおりです。
off
9.4.2 カスタマイズのオプション
次の各オプションは、必要に応じてSQLJプロファイルのカスタマイズを指定します。
-
-default-customizer
-
カスタマイザに直接渡すオプション
注意:
デフォルトのOracle固有コード生成を使用する場合は、SQLJによってプロファイルが生成されないため、カスタマイズが実行されません。その場合、これらのオプションは適用されません。
デフォルト・プロファイル・カスタマイザ(-default-customizer)
SQLJで下記のデフォルト以外のプロファイル・カスタマイザを使用するには、-default-customizer
を使用します。
oracle.sqlj.runtime.util.OraCustomizer
Oracle Databaseを使用しない場合は、このオプションを設定します。このオプションでは、Javaクラスの完全修飾名を引数として使用します。
注意:
このオプションをオーバーライドするには、SQLJのコマンドラインまたはプロパティ・ファイルで-P-customizer
オプションを指定します。
このオプションのコマンドライン構文は、次のとおりです。
-default-customizer=customizer_classname
次に例を示します。
-default-customizer=sqlj.myutil.MyCustomizer
次に、このオプションのプロパティ・ファイルでの設定の構文を示します。
sqlj.default-customizer=customizer_classname
次に例を示します。
sqlj.default-customizer=sqlj.myutil.MyCustomizer
次に、このオプションのデフォルト値を示します。
oracle.sqlj.runtime.util.OraCustomizer
注意:
Oracle DatabaseとISOコード生成を使用する場合は、デフォルトのOraCustomizer
でプロファイルのカスタマイズを行うことをお薦めします。
カスタマイザに直接渡すオプション
JVMやコンパイラと同様に、接頭辞(この場合は-P
)を使用すると、オプションをプロファイル・カスタマイザ・ハーネスに直接渡すことが可能になります。