ヘッダーをスキップ
Oracle® Database SQLJ開発者ガイド
11g リリース2 (11.2)
B56282-02
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

8 トランスレータのコマンドラインとオプション

ソース・コードの作成後、SQLJトランスレータでこのコードを変換する必要があります。この章では、SQLJトランスレータのコマンドライン、オプションおよびプロパティ・ファイルについて説明します。内容は次のとおりです。

トランスレータのコマンドラインとプロパティ・ファイル

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.sqljFoo2.sqljおよびFoobar.sqljが検索されます。


注意:

  • オプションを指定する位置は、必ずしもファイル・リストの前である必要はありません。オプションは、コマンドラインのどの箇所に指定した場合にも正常に処理されます。

  • すべてのコマンドラインのオプションは、変換されるすべてのファイルに適用されます。ファイル固有のオプションは設定できません。


ファイル・リストに.classファイルは指定しないでください。SQLJトランスレータがSQLJソース・ファイル中の変数の型解決に必要なクラスを見つけられるように、CLASSPATHを設定してください。-checksourceフラグが使用できる場合(デフォルト設定)、SQLJトランスレータでは、CLASSPATH内のコンパイルされていない.javaファイルで必要なクラスも検索できます。


注意:

ただ単にsqljと入力してスクリプトを実行すると、使用頻度の最も高いSQLJオプション一覧が表示できます。処理対象ファイルを指定しない場合も、スクリプト実行のたびにこのオプション一覧が表示されます。つまり-helpフラグを設定した場合と同じ結果になります。

ここでは、次の項目について説明します。

SQLJのオプション、フラグおよび接頭辞

ここでは、SQLJトランスレータに対して指定できるオプションについて説明します。ブール型オプションは、フラグと呼ばれます。JVM(SQLJスクリプトから起動)、およびJavaコンパイラとSQLJプロファイル・カスタマイザ(JVMから起動)に渡すオプションには、接頭辞を付けます。

SQLJオプションの概説

次の表8-1は、SQLJトランスレータでサポートされているオプションの一覧です。次のカテゴリに分類されています。

表8-1 SQLJトランスレータのオプション

オプション 説明 デフォルト カテゴリ

-bind-by-identifier

指定されたSQLJ文の中で複数回出現する同一のホスト変数を、単一のバインドとして処理するフラグです。

FALSE

高度

-C

Javaコンパイラに渡すオプションに付ける接頭辞です。

なし

高度

-cache

オンライン・セマンティクス・チェックの結果のキャッシングを有効化します(キャッシングすると、データベースへのラウンドトリップが削減されます)。

FALSE

高度

-checkfilename

ソース・ファイル名とそのソース・ファイル中のPublicクラス(定義済の場合)の名前とが対応していない場合に、変換時に警告を出すかどうかを指定します。

TRUE

環境

-checksource

状況によってはクラス・ファイルに加えてソース・ファイルも、SQLJの型解決の検査対象に指定します。

TRUE

高度

-classpath

JVMとJavaコンパイラに対してCLASSPATHを指定します(javacにも渡されます)。コマンドラインでのみ指定できます。

なし

基本

-codegen

コード生成のモードを指定します。oracleで直接Oracle Java Database Connectivity(JDBC)コールによるOracle固有コード生成を指定し、isoでISO標準SQLJコード生成を指定します。

oracle

基本

-compile

Javaのコンパイル処理を有効化/無効化します。対象は、SQLJの現在の実行で生成されたまたは以前に生成された.javaファイル、あるいはコマンドラインで指定された.javaファイルです。

TRUE

高度

-compiler-executable

使用するJavaコンパイラを指定します。

javac

環境

-compiler-encoding-flag

-encoding値が設定されている場合に、この設定をJavaコンパイラに渡すかどうかをSQLJに指示します。

TRUE

環境

-compiler-output-file

Javaコンパイラの出力を書き込むファイルを指定します。このオプションを設定しないと、コンパイラの出力は標準出力に送られます。

なし

環境

-compiler-pipe-output-flag

javac.pipe.outputシステム・プロパティを設定するかどうかをSQLJに指示します。このフラグを設定すると、Javaコンパイラがエラーとメッセージを、STDERRではなく、STDOUTに出力します。

TRUE

環境

-components

Oracle Dynamic Monitoring Service(DMS)で使用するコンポーネント(パッケージおよびクラス)のインストルメント処理を指定します。これは、インストルメントが-instrumentオプションを使用して有効になっていることが前提です。変換されるすべてのコンポーネントをインストルメントするにはallを指定します。

all

基本

-d

SQLJで生成される.serプロファイル・ファイル(生成される場合)およびコンパイラで生成される.classファイルの出力先ディレクトリを指定します(javacにも渡されます)。

(.classファイルの場合は.javaファイルのディレクトリを使用し、.serファイルの場合は.sqljファイルのディレクトリを使用します。)

基本

-default-customizer

使用するプロファイル・カスタマイザを判断します。クラス名を指定します。

oracle.sqlj. runtime.util. OraCustomizer

環境

-default-url-prefix

URL設定のデフォルト接頭辞を設定します。

jdbc:oracle:thin:

基本

-depend

javacに渡され、-checksourceが有効になります。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-deprecation

javacにのみ渡されます。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-dir

SQLJにより生成される.javaファイルの出力ディレクトリを設定します。

(.sqlj入力ファイルのディレクトリが使用されます。)

基本

-driver

登録するJDBCドライバ・クラスを判断します。クラス名またはクラス名のカンマ区切りのリストを指定します。

oracle.jdbc.OracleDriver

基本

-encoding

SQLJとコンパイラでグローバリゼーション・サポートに使用するエンコーディングを指定します。javacにも渡されます。コマンドラインでは、-eを使用できます。

JVMのfile.encodingの設定

基本

-explain

トランスレータのエラー・メッセージに原因と処置情報の表示を要求するフラグです。

FALSE

基本

-fixedchar

CHARデータと比較するために文字列をWHERE句にバインドするときに、空白埋めを考慮するフラグです。

FALSE

基本

-g

javacに渡され、-linemapが有効になります。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-help-help-long-help-alias

SQLJオプションの名前、説明および現行値に関する様々なレベルの情報を表示するフラグです。コマンドラインでのみ指定できます。-helpのかわりに-hを指定できます。

無効

基本

-instrument

Oracle DMSで使用する変換済ファイルをインストルメントするかどうかを指定します。

FALSE

基本

-jdblinemap

-linemapオプションの改良型です。Sun社のjdbデバッガで使用されます。

FALSE

基本

-J

JVMに渡すオプションに付ける接頭辞です。コマンドラインでのみ指定できます。

なし

高度

-linemap

生成されたJavaクラス・ファイルと元のSQLJコード間での行番号のマッピングを有効化します。

FALSE

基本

-n

コマンドライン全体を(SQLJ_OPTIONSでの設定を含めて)、SQLJトランスレータに渡されたとおりにエコーし、トランスレータでは実行しないことをsqljスクリプトに指示します。-vm=echoと同じ結果になります。コマンドラインでのみ指定できます。

無効

基本

-ncharconv

Stringホスト変数のNCHAR列へのバインドを実行します。

FALSE

基本

-nowarn

javacに渡され、-warn=noneを設定します。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-O

javacに渡されると、-linemapは無効化されます。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-offline

セマンティクス・チェックに使用するオフライン・チェッカを判断します。クラスの完全修飾名のリストを指定します。

oracle.sqlj.checker.OracleChecker

高度

-online

セマンティクス・チェックに使用するオンライン・チェッカを判断します。クラスの完全修飾名を指定します。(オンライン・チェックを有効にするには、-userの設定も必要です。)

oracle.sqlj.checker.OracleChecker

高度

-optcols

パフォーマンスが最適化されるようにイテレータ列型およびサイズ定義を有効化します。トランスレータでOracle固有コード生成に直接使用されるか、Oracleカスタマイザにユーザー、パスワード、URLの設定とともに転送されてISOコード生成に使用されます。

FALSE

基本

-optparams

JDBCリソース割当てが最適化されるようにパラメータ・サイズ定義を有効化します(-optparamdefaultsと併用します)。トランスレータでOracle固有コード生成に直接使用されるか、Oracleカスタマイザに転送されてISOコード生成に使用されます。

FALSE

基本

-optparamdefaults

特定のデータ型にパラメータ・サイズのデフォルトを設定します(-optparamsと併用します)。トランスレータでOracle固有コード生成に直接使用されるか、Oracleカスタマイザに転送されてISOコード生成に使用されます。

FALSE

基本

-P

SQLJプロファイル・カスタマイザに渡すオプションに付ける接頭辞です。

なし

高度

-parse

オフラインSQLパーサーを有効にするオプションです。使用可能な設定は、bothonline-onlyoffline-onlynoneまたは代替パーサーを実装するJavaクラス名です。

注意: このオプションの設定によっては、-userオプションの効果が無視され、オンライン・セマンティクス・チェックも無効になります。

both

高度

-passes

コンパイルを挟んで、SQLJを2回実行することをsqljスクリプトに指示します。コマンドラインでのみ指定できます。

FALSE

環境

-password

オンライン・セマンティクス・チェック用のデータベース接続のユーザー・パスワードを設定します。-pはコマンドラインで指定できます。

なし

基本

-profile

ISOコード生成の場合に、現在のSQLJの実行で生成されるプロファイル・ファイルのプロファイル・カスタマイズ処理を有効化または無効化します。

TRUE

高度

-props

オプション設定のコマンドラインの代替方法として、プロパティ・ファイルを指定します。(sqlj.propertiesも読み込まれます。)コマンドラインでのみ指定できます。

なし

基本

-ser2class

ISOコード生成の場合に、生成した.serプロファイルを.classファイルに変換するようにSQLJに指示します。

FALSE

高度

-status

実行中のステータス・メッセージの表示をSQLJに要求します。-statusのかわりに、コマンドラインで-vを指定できます。

FALSE

基本

-url

オンライン・セマンティクス・チェック用のデータベース接続のURLを設定します。

jdbc:oracle:oci:@

基本

-user

オンライン・セマンティクス・チェックを有効にし、データベース接続のユーザー名(およびパスワードとURL)を設定します。-uはコマンドラインで指定できます。

なし(オンライン・セマンティクス・チェックはありません。)

基本

-verbose

javacに渡されると、-statusが有効になります。プロパティ・ファイルに設定されている場合は-Cコンパイラ接頭辞が必要です。

なし

javac

-version-version-long

SQLJおよびJDBCドライバのバージョン情報に関する様々なレベルの情報を表示するフラグです。コマンドラインでのみ設定できます。

無効

基本

-vm

JVMを指定してSQLJトランスレータの実行に使用します。コマンドラインでのみ指定できます。

java

環境

-warn

各種のSQLJ警告を有効化または無効化するフラグのカンマ区切りリストです。個別フラグは、cast/nocastprecision/noprecisionnulls/nonullsportable/noportablestrict/nostrictおよびverbose/noverboseです。グローバル・フラグはall/noneです。

cast precision nulls noportable strict noverbose

基本


オプション、フラグおよび接頭辞に関する注意

次の注意事項があります。

  • 前の表の「説明」列で「コマンドラインのみ」と示されているフラグ、オプションおよび接頭辞は、プロパティ・ファイルでは設定できません

  • コマンドラインのオプション名は、他に渡されるオプションも含めて、大/小文字が区別され、通常はすべて小文字にします。通常、オプション値も大/小文字が区別されます。

  • いくつかのオプションは、表8-1に示すとおり、Oracleのloadjavaユーティリティとの互換性をサポートするために、コマンドラインで代替構文を使用できます。

  • SQLJの大半のオプションは、プロパティ・ファイルでも設定できます。

  • 環境変数SQLJ_OPTIONSをコマンドラインのかわりに使用するか、またはコマンドラインと併用して、オプションを設定できます。

  • このマニュアルの説明では、ほとんどの場合、ブール・フラグの設定値をtrueまたはfalseで示していますが、yes/noon/offまたは1/0でも有効化/無効化を行えます。

-passwordオプションに関する注意

psなどのユーティリティにより他のユーザーがパスワードを傍受しないようにパスワードを指定するには、次のいずれかの方法を選択します。

  • -password引数を省略します。この場合、コマンドラインでパスワードを入力するように求められます。password引数は、オペレーティング・システムには表示されません。

  • パスワードの設定をプロパティ・ファイルに追加し、このプロパティ・ファイルを使用するようにSQLJトランスレータを設定します。つまり、パスワードをオペレーティング・システムに公開しなくても、SQLJ変換スクリプトを実行することができます。

  • JDeveloperでSQLJを使用します。この方法では、オペレーティング・システムにパスワードは公開されません。

loadjava互換オプション

JavaおよびSQLJアプリケーションをOracle Database 11g インスタンスにロードするためのloadjavaユーティリティとの互換のために、コマンドラインでの指定時に、次の代替構文が指定したオプション用に認識されます。

  • -e(-encoding)

  • -h(-help)

  • -p(-password)

  • -u(-user)

  • -v(詳細メッセージの出力。-statusに相当。)

loadjava構文との一貫性を完全に保持するには、次のように等号(=)のかわりにスペースを使用してこれらのオプションを設定します。

-u scott -v -e SJIS

注意:

この代替オプション構文はコマンドラインまたは環境変数SQLJ_OPTIONSでのみ認識されます。プロパティ・ファイルでは認識されません。


関連項目:

loadjavaユーティリティの概要は、『Oracle Database Java開発者ガイド』を参照してください。

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トランスレータ・フラグの設定にも影響を与えます。

表8-2に要約を示します。表に注記されているように、コンパイラ接頭辞が必須の場合もありますが、これらのオプションはすべてSQLJコマンドラインまたはプロパティ・ファイルに設定できます。


注意:

  • デフォルトの場合、javacは、送信されたプラットフォームのブートストラップ・クラスと拡張クラスに対して、クラスをコンパイルします。一方、javacは、異なるJavaプラットフォームのブートストラップ・クラスと拡張クラスに対するクロスコンパイル・クラスもサポートします。javac-bootclasspathオプションと-extdirsオプションは、クロスコンパイル専用です(JDK 1.5.x)。

  • デフォルトでは、javacは、javacが取得されたJDKバージョンと互換性がある.classファイルを生成します。-targetオプションを使用して、この設定を変更します。


表8-2 SQLJによるjavacオプションのサポート

コマンドライン・オプション(-Cが記されている場合は-C接頭辞付き) 説明 SQLJとの関連

-C-bootclasspath

指定されている一連のブートストラップ・クラスに対するクロスコンパイルをjavacに指示します。

なし

-classpath

javacとJVMのCLASSPATHを設定します。

SQLJのオプションも設定します。

-d

.classファイルとSQLJプロファイル・ファイルの出力ディレクトリを設定します。

SQLJのオプションも設定します。

-depend

依存性のある古いファイルの再帰的コンパイルをjavacに指示します。

SQLJ -checksourceオプションを有効化します。

-deprecation

非推奨のAPIが使用されている出力ソースの位置をjavacに指示します。

なし

-encoding

SQLJjavacの両方に対してエンコーディングを設定します。

SQLJのオプションも設定します。

-C-extdirs

指定されている拡張ディレクトリに対するクロスコンパイルをjavacに指示します。

なし

-g

javacデバッグ情報を生成します。

SQLJ -linemapオプションを有効化します。

-nowarn

警告を生成しないことをjavacに指示します。

SQLJ -warn=noneオプションを設定します。

-O

javacに最適化を指示します。

SQLJ -linemapオプションを無効化します。

-C-target

指定のJDKバージョン・レベル以上のJVMでのみ動作するように.classファイルを生成することをjavacに指示します。

なし

-verbose

javacにリアルタイム・ステータス・メッセージの生成を指示します。

SQLJ -statusオプションを有効化します。


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/jdk1.5.2/bin/java
       -compiler-executable=/usr/local/packages/jdk1.5.2/bin/javac
       -C-bootclasspath=/usr/local/packages/jdk1.5.1/jre/lib/rt.jar
       -C-extdirs="" -C-target=1.1.8 Demo.sqlj

プロファイル・カスタマイザのオプション

プロファイル・カスタマイザのオプションであるカスタマイザ・ハーネスのフロントエンド、Oracleデフォルトのカスタマイザおよびデバッグやデプロイメント時のセマンティクス・チェックに使用する特別なカスタマイザの詳細は、「カスタマイズおよび専用カスタマイザ」を参照してください。これは、ISO標準コード生成の場合(-codegen=iso)にのみ使用します。

コマンドラインの構文と処理

スクリプト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/jdk1.5.1/jre/lib/rt.jar
    
  • オプションに-P接頭辞を付けると、SQLJプロファイル・カスタマイザのオプションになり、JVMがカスタマイザを起動するときに、カスタマイザに渡されます。これは、ISO標準コード生成(-codegen=iso)の場合にのみ使用します。トランスレータ・オプションと同様に、オプションの設定では次のように等号(=)を使用します。

    -P-user=scott
    

    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.sqljFoo.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.sqljFoo.javaの両方を検索するので、書込み先と読込み元が同時にFoo.javaになります。

% sqlj -dir=outdir -d=outclasses Foo.sqlj Foo.java

これは問題ありません。生成されるFoo.javaoutdirサブディレクトリにあり、読み取られるFoo.java/myhome/mypackageディレクトリにあるためです。Foo.javaFoo.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.sqljDiveBar.sqljFooBar.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およびコマンドラインの設定値が含まれますが、プロパティ・ファイルの設定値は含まれません。

プロパティ・ファイルによるオプション設定

コマンドラインのかわりに、プロパティ・ファイルでも、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)。


注意:

SQLJのプロパティ・ファイルの説明は、サーバー側SQLJではなく、クライアント側SQLJを対象にしています。サーバー側のSQLJオプションの指定はメカニズムが異なり、オプションの小規模なサブセットのみがサポートされます。詳細は、「サーバー側の埋込みトランスレータでサポートされるオプション」を参照してください。

プロパティ・ファイルの構文

プロパティ・ファイルでは、1行に1つのオプションを設定します。SQLJのオプション行、コンパイラのオプション行およびカスタマイザのオプション行を混在できます。SQLJフロントエンドによってオプション行が解析され、適切に処理されます。

次に、各種オプションの構文を示します。

  • 各SQLJオプションの前に、ハイフンではなくsqlj.(ピリオドまで)を付けます。この接頭辞で始まるオプションのみがSQLJトランスレータに渡されます。次に例を示します。

    sqlj.warn=none
    sqlj.linemap=true
    
  • 各Javaコンパイラ・オプションの前に、-C-ではなく、接頭辞compile.(ピリオドまで)を付けます。この接頭辞で始まるオプションがJavaコンパイラに渡されます。次に例を示します。

    compile.verbose
    compile.bootclasspath=/usr/local/packages/jdk1.5.1/jre/lib/rt.jar
    
  • 汎用的なプロファイル・カスタマイズ・オプション(どのカスタマイザにも適用されるオプション)には、-P-ではなく、接頭辞profile.(ピリオドまで)を付けます。この接頭辞で始まるオプションのみがプロファイル・カスタマイザに渡されます。次に例を示します。

    profile.backup
    profile.user=scott/tiger
    

    特定のカスタマイザに対するオプションを指定するには、次のようにprofile.Cを使用します。

    profile.Csummary
    profile.Coptparamdefaults=VAR%(50),LONG%(500),RAW_TYPE()
    

    Oracleのデフォルト・カスタマイズの対象でないプロファイルのカスタマイズは、高度な機能といえます。

  • コメント行はシャープ記号(#)で始めます。次に例を示します。

    # Comment line.
    
  • 空白行も使用できます。

コマンドラインと同じように、プロパティ・ファイルでもフラグの有効化/無効化をtrue/falseon/off1/0、またはyes/noで指定できます。フラグを有効にするには、次のようにフラグ名の入力のみで十分です。設定値の入力は必要ありません。

sqlj.linemap

注意:

一貫性を保持するために、プロパティ・ファイル内の値を伴うオプションには(スペースが使用できる場合にも)等号(=)を使用することをお薦めします。

プロパティ・ファイルの簡単な例

プロパティ・ファイルの設定例を示します。

# Set user and JDBC driver
sqlj.user=scott
sqlj.driver=oracle.jdbc.OracleDriver 

# Turn on the compiler verbose option
compile.verbose

この設定は、次のSQLJコマンドラインに相当します。

% sqlj -user=scott -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:@207.67.155.3:1521/myservice

# Warning settings
sqlj.warn=all

# Cache
sqlj.cache=on

デフォルトのプロパティ・ファイル

SQLJコマンドラインでプロパティ・ファイルを指定したどうかに関係なく、SQLJフロントエンドでsqlj.propertiesというファイルが検索されます。このファイルの検索は、Javaホーム・ディレクトリ、ユーザー・ホーム・ディレクトリ、およびカレント・ディレクトリの順番で実行されます。見つかった各sqlj.propertiesファイルが順番に処理され、オプションの前の設定値は新しい設定値でオーバーライドされます。つまり、カレント・ディレクトリにあるsqlj.propertiesファイルで設定されたオプション値によって、ユーザー・ホーム・ディレクトリまたはJavaホーム・ディレクトリにあるsqlj.propertiesファイルで設定されたオプション値がオーバーライドされます。

環境変数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を設定できます。詳細は、使用するオペレーティング・システムのドキュメントを参照してください。

オプション設定の優先順位

SQLJでは、オプション値が次の順に設定されます。

  1. オプションをデフォルト値に設定します(デフォルト値がある場合)。

  2. Javaのホーム・ディレクトリでsqlj.propertiesファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。

  3. ユーザーのホーム・ディレクトリでsqlj.propertiesファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。

  4. カレント・ディレクトリでsqlj.propertiesファイルを探します。見つかると、このファイルの指定に基づき、オプションを設定します。

  5. 環境変数SQLJ_OPTIONSでオプション設定を探し、見つかったオプション設定をコマンドラインの先頭に挿入します。SQLJ_OPTIONSの指定どおりに、オプションを設定します。

  6. コマンドラインでオプション設定を探し、この指定に基づき、オプション値を設定します。SQLJはコマンドラインを処理しながら、-propsオプションで指定されているファイルを調べ、その指定に基づき、オプション値を設定します。


注意:

  • 同じオプションが複数回設定されていると、前の設定値が後の設定値によって上書きされます。

  • sqlj.propertiesファイルのオプション設定は、上から下に読み込まれます。つまり、下方のエントリが上方のエントリより優先されます。

  • コマンドラインの-propsオプションでプロパティ・ファイルを指定すると、このファイルのオプション設定がコマンドラインの-propsオプションの位置に挿入されます。

  • SQLJでは、コマンドラインのオプションが、-propsファイルから挿入されたオプションも含めて、左から右に読み取られます。つまり、後(右方)の設定値が前(左方)の設定値より優先されます。


SQLJを次のように実行するとします。

% sqlj -user=scott -props=myprops.properties -dir=/home/java

ファイルmyprops.propertiesはカレント・ディレクトリにあり、次の値が設定されているものとします。

sqlj.user=tony
sqlj.dir=/home/myjava

これらの設定値は、コマンドラインの-propsオプションの指定位置に挿入されているかのように処理されます。したがって、userオプションの設定値としては、scottエントリよりtonyエントリが優先され、dirオプションの設定値としては、/home/myjavaエントリより/home/javaエントリが優先されます。

基本的なトランスレータ・オプション

ここでは、SQLJの実行時に指定できる基本的なフラグとオプションの構文と機能について説明します。ここで説明するオプションは、標準の操作モードで実行できます。プロパティ・ファイルでも指定できるオプションの構文も示します。

ここでは、次の項目について説明します。

基本的なコマンドライン専用オプション

次の基本的なオプションは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(JVM)とコンパイラで使用するCLASSPATH(-classpath)

Javaの大半のJVMおよびコンパイラへの対応として、SQLJはコマンドラインで指定された-classpathオプションを認識します。このオプションの設定では、ほとんどのJVMまたはコンパイラと同じようにスペースを使用することも、他のSQLJオプションと同じように等号(=)を使用することも可能です。この例(両方ともUNIX環境で実行)を次に示します。

-classpath .:$ORACLE_HOME/jdbc/lib/ojdbc5.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/sqlj/lib/runtime12.jar

-classpath= .:$ORACLE_HOME/jdbc/lib/ojdbc5.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/ojdbc5.jar:$ORACLE_HOME/sqlj/lib/translator.jar:$ORACLE_HOME/sqlj/lib/runtime2.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オプションの詳細情報が一覧表示されます。具体的には、各オプションに関して次の情報が表示されます。

  • オプション名

  • オプションの型(intStringなど、オプションの入力値としての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 11.2.0.1.0 Production
Copyright  1997, 2008, Oracle Corporation. All Rights Reserved.

-version-longを設定すると、SQLJとSQLJランタイム・ライブラリのリリース、JDBCドライバのリリース番号(見つかった場合)、Java環境に関する情報が表示されます。たとえば、Oracle JDBCを使用している場合は、このオプションで次のように表示されます。

sqlj -version-long
Oracle SQLJ Release 11.2.0.1.0 Production
Copyright  1997, 2008, Oracle Corporation. All Rights Reserved.
JDBC version: Oracle JDBC driver version 11.2 (11.2.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=scott/tiger@jdbc:oracle:thin:@ -classpath=/myclasses/bin

次のコマンドラインを入力します。

% sqlj -n -e SJIS myapp.sqlj

次のエコーが表示されます。

java -classpath /myclasses/bin sqlj.tools.Sqlj -user=scott/tiger@jdbc:oracle:thin:@ -C-classpath=/myclasses/bin 
-encoding=SJIS myapp.sqlj

全体が1行で入力されていることに注意してください。


注意:

  • コマンドラインでパスワードをエコーすることは安全な方法ではありません。

  • -nのかわりに、-vm=echoと入力することも可能です。

  • オプション設定を確認するもう1つの効果的な方法は、-help-longフラグを使用することです。これによって、すべてのオプションの現行の設定が表示されますが、その中には、コマンドラインで設定したその他のオプションと、プロパティ・ファイルおよびSQLJ_OPTIONSの設定値も含まれます。


コマンドラインの構文は、次のとおりです。

-n

次に例を示します。

-n

デフォルトでは、この設定は無効になっています。

出力ファイルとディレクトリのオプション

-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.propertiesconnect.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

このオプションにはデフォルト値はありません。

接続オプション

オンライン・セマンティクス・チェック用のデータベース接続の際は、次のオプションを使用します。

  • -user

  • -password

  • -url

  • -default-url-prefix

  • -driver

  • driver_name

SQLJトランスレータは、アプリケーション実行時と同じデータベースまたはスキーマに接続する必要はありません。アプリケーションのソース・コード中の接続情報は、SQLJオプションの接続情報とは別々に指定できます。実際に、デプロイメント環境が開発時とテスト時には使用できないことがあります。

オンライン・セマンティクス・チェックとユーザー名(-user)

データベース接続を行わない簡単なセマンティクス・チェックをオフライン・チェックと呼びます。接続が必要となる、より詳細なセマンティクス・チェックをオンライン・チェックと呼びます。オンライン・チェックでは、SQLJの強い型指定パラダイムの主要メリットの1つが提供されます。つまり、互換性のない型によって、通常であればランタイムSQL例外となるものが、ユーザーがアプリケーションを実行する前の変換中に捕捉されます。

-userオプションを使用すると、オンライン・セマンティクス・チェックが有効になり、基本スキーマのユーザー名(スキーマ名)を指定できます。基本スキーマとは、トランスレータに提供されるサンプル・データベース・スキーマであり、トランスレータでチェック実行時に使用されます。-userオプションは、パスワードとURLの指定にも使用できます(これに対し、-password-urlオプションは別々に使用します)。

-userフラグ以外では、オンライン・セマンティクス・チェックを有効化および無効化できません。SQLJでは、-userオプションの有無によって、オンライン・セマンティクス・チェックを有効化および無効化します。


注意:

  • SQLJの-parseオプションの設定によっては、-userオプションの効果が無視され、オンライン・セマンティクス・チェックも無効になります。

  • loadjavaユーティリティ対応として、-userのかわりに-uをコマンドラインで指定できます。

  • ユーザー名には文字/または@を使用できません。

  • コマンドラインでユーザー名を指定するときは、次のように=のかわりにスペースを使用できます。

    -user scott/password
    -user@CtxClass scott/password
    -u scott/password
    -u@CtxClass scott/password
    
  • 文字@を使用したパスワードは、-userオプションでは設定できません。-user-passwordをそれぞれ別に設定する必要があります。

  • ログイン名がDBAグループのメンバーである場合、SYSDBAとして、SYSスキーマに接続する特別な権限があります。この場合、ユーザー名SYSまたはINTERNALを指定できます。

  • ISOコード生成では、トランスレータの-user設定がプロファイル・カスタマイザに転送されますが、カスタマイザのuser設定によって無視されることもあります。


次に、-userオプションの最も基本的な使用方法を示します。

-user=scott

DefaultContextクラスのデフォルト接続などのインスタンスのみを使用すると、設定値がすべてのSQLJ実行文に適用されます。この例では、scottスキーマに対してオンライン・チェックが行われます。

パスワードまたはURL(あるいはその両方)をユーザー名と一緒に次の構文で指定することも可能です(パスワードの前に/を付け、URLの前に@を付けます)。

-user=scott/password
-user=scott@jdbc:oracle:oci:@
-user=scott/password@jdbc:oracle:oci:@

URLを-urlオプションで指定し、パスワードを対話形式または-passwordオプションで指定する方法もあります。

オンライン・セマンティクス・チェックを無効化するには、次のように-userオプションを空の文字列に設定します。

-user=

デフォルト接続やDefaultContextクラスの他のインスタンスのみを使用すると、この設定値がすべてのSQLJ実行文に適用されます。

オンライン・セマンティクス・チェックの無効化は、プロパティ・ファイルで有効にしたオンライン・チェックをコマンドラインでオーバーライドする場合や、デフォルトのプロパティ・ファイルで有効にしたオンライン・チェックをユーザー指定のプロパティ・ファイル(-propsオプションで指定)でオーバーライドする場合などに便利です。

専用のユーザー名URL.CONNECTもあります。このユーザー名を使用して、URLで接続のユーザーとパスワードなどの詳細を指定できます。

アプリケーションでさらに接続コンテキスト・クラスを宣言して使用する場合は、これらのクラスのインスタンスを使用するSQLJ実行文をテストするときに-userを使用できます。次のように、特定の接続コンテキスト・クラス(CtxClassなど)のオンライン・チェックを行うユーザー名を指定します。

-user@CtxClass=scott

この指定では、CtxClassの接続コンテキストのインスタンスが指定されているすべてのSQLJ実行文に対して、scottスキーマのオンライン・チェックが行われます。

デフォルトの接続コンテキスト・クラスの場合と同様、次のように特定の接続コンテキスト・クラスに対するパスワードまたはURLを-userで指定できます。

-user@CtxClass=scott/password@jdbc:oracle:oci:@

接続コンテキスト・クラスCtxClassは、ソース・コード中に宣言するか、あらかじめ.classファイルにコンパイルしておく必要があります。

各接続コンテキスト・クラスに対してオンライン・チェックの有効化やユーザー名の設定を行う場合、そのクラスごとに-userオプションを個別に指定します。次に示したように、この設定は他のユーザーには反映されません。次に例を示します。

-user@CtxClass1=user1 -user@CtxClass2=user2 -user@CtxClass3=user3

アプリケーションで複数の接続コンテキスト・クラスを使用する場合、クラスを指定しない-user設定は、DefaultContextクラスだけでなく、-user設定を指定しないすべてのクラスにも適用されます。通常は、異なる接続コンテキスト・クラスは、異なるSQLオブジェクト・セットに対して使用することを目的としているため、-user設定は接続コンテキスト・クラスごとに指定することになります。

接続コンテキスト・クラスCtxClass1CtxClass2およびCtxClass3を宣言し、-userを次のように設定した場合を想定します。

-user@CtxClass2=scott/password -user=bill/lion

CtxClass2のインスタンスを使用しているアプリケーション内の文が、scottスキーマと照合されます。DefaultContextCtxClass1またはCtxClass3のインスタンスを使用している文が、billスキーマと照合されます。

また、-userオプションでオンライン・チェックを有効にした後で、特定の接続コンテキストのオンライン・チェックを無効化するには、その接続コンテキストに対して空のユーザー名で-userオプションを設定します。たとえば、次のような設定があるとします。

-user@CtxClass2=

CtxClass2のインスタンスである接続オプションを指定したSQLJ実行文に対するオンライン・セマンティクス・チェックが無効になります。

デフォルトの接続コンテキスト・クラスおよびユーザー名を指定しなかった接続コンテキスト・クラスのオンライン・セマンティクス・チェックを無効化するには、次のように指定します。

-user=

このオプションの一般的なコマンドライン構文は、次のとおりです。

-user<@conn_context_class>=username</password><@url>

次に例を示します。

-user=scott
-user=scott/password
-user=scott@jdbc:oracle:oci:@
-user=scott/password@jdbc:oracle:oci:@
-user=
-user=URL.CONNECT
-user@CtxClass=scott/password
-user@CtxClass=

次に、このオプションのプロパティ・ファイルでの設定の構文を示します。

sqlj.user<@conn _context_class>=username</password><@url>

次に例を示します。

sqlj.user=scott
sqlj.user=scott/password
sqlj.user=scott@jdbc:oracle:oci:@
sqlj.user=scott/password@jdbc:oracle:oci:@
sqlj.user=
sqlj.user=URL.CONNECT
sqlj.user@CtxClass=scott/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 11g では空のパスワードを使用できません。


注意:

  • コマンドラインで指定した-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=tiger
sqlj.password=
sqlj.password=EMPTY.PASSWORD
sqlj.password@CtxClass=tiger

このオプションにはデフォルト値はありません。DefaultContextのパスワードが使用されるか、ユーザーの入力を要求するプロンプトが表示されます。

オンライン・セマンティクス・チェックに使用する接続URL(-url)

-urlオプションでは、オンライン・セマンティクス・チェックのためのデータベース接続の確立に使用するURLを指定します。必要に応じて、ホスト名、ポート番号およびデータベースのサービス名(またはSID)をURLに指定できます(SIDは、Oracle Database 11g では非推奨です)。

-userオプションの設定の一部として、URLを指定することも可能です。URLを-userオプションで指定済の場合は、接続コンテキスト・クラスに対して-urlオプションを使用しないでください(-userオプションの方が優先されます)。

-urlオプションの大半の機能は、-userオプションの機能に相当します。つまり、アプリケーションでDefaultContextのデフォルト接続などのインスタンスのみを使用する場合は、すべてのSQLJ文のチェックのための接続に使用するURLを、次のように指定します。

-url=jdbc:oracle:oci:@

または、URLにホスト名、ポート番号およびサービス名を含める場合は、次のように指定します。

-url=jdbc:oracle:thin:@myhost:1521/myservice

URL設定の最初にjdbc:が付かない場合、設定形式はhost :port /servicename であると見なされます。この場合、デフォルトでは、設定の最初に次の接頭辞が自動的に付けられます。

jdbc:oracle:thin:@

-url設定をlocalhost:1521/myserviceにすると、URLが自動的に次のようになります。

jdbc:oracle:thin:@localhost:1521/myservice

このデフォルトの動作を削除または変更するには、-default-url-prefixオプションを使用します。

ユーザーおよびパスワードは、-userおよび-password設定ではなく、-url設定でも指定できます。この場合は、次に示すように、-userURL.CONNECTに設定します。

-url=jdbc:oracle:oci:scott/tiger@ -user=URL.CONNECT

たとえばCtxClass1など、追加の接続コンテキスト・クラスを宣言して使用する場合は、その接続コンテキスト・クラスを使用する文のテストのための、基本スキーマを追加指定します。次に示す例のように、これらのスキーマのURLは-urlオプションで指定できます。

-url@CtxClass1=jdbc:oracle:oci:@

-url設定と-user設定のいずれでもURLが設定されていない接続コンテキスト・クラスの場合は、デフォルトの接続コンテキスト・クラスに設定されているURLが使用されます。ただし、デフォルトのコンテキスト・クラスにURLが設定されていることを前提とします。


注意:

  • URLが設定されている接続コンテキスト・クラスには、ユーザー名も設定されていることが必要です。設定されていないと、オンライン・チェックが行われません。

  • コマンドラインでURLを設定するときは、次のように=のかわりにスペースを使用できます。

    -url jdbc:oracle:oci:@
    -url@CtxClass jdbc:oracle:oci:@
    
  • ISOコード生成では、トランスレータの-url設定がプロファイル・カスタマイザに転送されますが、カスタマイザのurl設定によって無視されることもあります。


このオプションのコマンドライン構文は、次のとおりです。

-url<@conn_context_class>=URL

次に例を示します。

-url=jdbc:oracle:oci:@
-url=jdbc:oracle:thin:@hostname:1521/myservice
-url=jdbc:oracle:oci:scott/password@
-url=hostname:1521/myservice
-url@CtxClass=jdbc:oracle:oci:@

次に、このオプションのプロパティ・ファイルでの設定の構文を示します。

sqlj.url<@conn_context_class>=URL

次に例を示します。

sqlj.url=jdbc:oracle:oci:@
sqlj.url=jdbc:oracle:thin:@hostname:1521/myservice
sqlj.url=jdbc:oracle:oci:scott/tiger@
sqlj.url=hostname:1521/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:1521/myservice
-user=scott/tiger@myhost:1521/myservice

デフォルトでは、URLが次のように解釈されます。

jdbc:oracle:thin:@myhost:1521/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 11g での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

注意:

この属性はプロパティ・ファイルからのみ設定でき、同等のコマンドライン・オプションはありません。

レポートと行マッピングのオプション

次に示す各オプションでは、SQLJがモニターする条件、リアルタイム・エラーとステータス・メッセージを生成するかどうか、およびトランスレータのエラー・メッセージに原因と処置の情報を含めるかどうかを指定します。

  • -warn

  • -status

  • -explain

次のオプションを使用すると、生成済のJava.classファイルから元の.sqljソース・ファイルへの行マッピングができます。この行マッピングを行うと、ランタイム・エラーについて、元のソース・コードの該当箇所を確認できます。

  • -linemap

  • -jdblinemap

-jdblinemapをSun社のjdbデバッガで使用します。それ以外の場合は、-linemapを使用します。

トランスレータからの警告(-warn)

SQLJトランスレータでは、変換時の状況に応じて、様々な警告や情報メッセージを表示できます。-warnオプションは、どの警告およびメッセージを表示するか、つまりどの状況を監視して、どの状況を無視するかを指定する、一連のフラグで構成されます。このオプションに指定するフラグをすべて組み合せて、カンマ区切りの単一の文字列にする必要があります。

表8-3に、テストする状況、各状況に対するフラグ値trueおよびfalseの意味、フラグ値trueの意味、およびデフォルトの値を示します。

表8-3 SQLJの警告のテストとフラグ

テストおよびフラグ機能 TRUE/FALSE値

継承階層で宣言されたオブジェクト型のサブタイプの要件のテスト: castを有効にすると、SQL継承階層のSQLオブジェクト型を使用するには、宣言された型のサブタイプを実行時に渡す必要がある場合に、警告を受け取ります。

cast(デフォルト)

nocast

データ精度のテスト: precisionを有効にした場合、データベースの列からJavaホスト変数に値を移動した際にデータの精度が失われる可能性があると、警告を受け取ります。

precision(デフォルト)

noprecision

NULL化可能なデータの変換ロスのテスト: -nullsを有効にした場合、データベースの列からJavaホスト変数にNULL化可能の列またはNULL化可能のJava型を移動した際に、変換でデータの損失が発生する可能性があると、警告を受け取ります。

nulls(デフォルト)

nonulls

移植可能性のテスト: -portableを有効にすると、SQLJ句の移植可能性がチェックされ、移植できない句があると警告を受け取ります。(ベンダー固有の型や機能など、SQLJの拡張機能が使用されていると、移植ができません。)

portable

noportable(デフォルト)

名前付きイテレータの厳密マッチングのテスト: -strictを有効にすると、データベースから選択した列の数とデータが取り込まれている名前付きイテレータ内の列の数が一致することが、SQLJでの必須条件になります。データベース・カーソル内の列に対応する列がイテレータにないと、警告が生成されます。nostrictを設定した場合、データベース・カーソル内の列数を、イテレータ内の列数より多くすることが可能になります(ただし、イテレータ内の列数未満にはできません)。一致しない列は無視されます。

strict(デフォルト)

nostrict

変換時の情報メッセージ: -verboseを有効にすると、オンライン・チェック用に確立されたデータベース接続など、変換処理についての追加の情報メッセージが生成されます。

verbose

noverbose(デフォルト)

警告のグローバルでの有効化または無効化: allまたはnoneを指定して、すべての警告を有効または無効にします。

all

none


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

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

コード生成、最適化および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=scott@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リソース割当て量が指定したサイズに基づいて最適化されます。このサイズの優先順位は次のとおりです。

  1. ソース・コードのヒント中に指定したサイズ(ある場合)

  2. -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

  • VARCHARVARCHAR2(同義)

  • LONGLONGVARCHAR(同義)

  • BINARYRAW(同義)

  • VARBINARY

  • LONGVARBINARYLONGRAW(同義)

-optparamdefaultsオプションでは、次のグループ名とワイルドカードも認識されます。

  • CHAR_TYPEには、CHARVARCHAR/VARCHAR2およびLONG/LONGVARCHARがあります。

  • RAW_TYPEには、BINARY/RAWVARBINARYおよび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

高度なトランスレータ・オプション

ここでは、SQLJを実行する際に指定できる、高度なフラグとオプションの構文および機能について説明し、JVM、JavaコンパイラまたはSQLJプロファイル・カスタマイザにオプションを渡す際に使用する接頭辞についても説明します。これらのオプションを使用すると、Oracle SQLJ実装の特殊な機能を実行できます。プロパティ・ファイルでも指定できるオプションの構文も示します。

ここでは、次の項目について説明します。

オプション設定を他の実行可能プログラムに渡す接頭辞

Javaインタプリタ、JavaコンパイラおよびSQLJプロファイル・カスタマイザに渡すオプションには、それぞれ次のフラグが付けられます。

  • -J(Javaインタプリタに渡すオプションに付きます。)

  • -C(Javaコンパイラに渡すオプションに付きます。)

  • -P(プロファイル・カスタマイザに渡すオプションに付きます。ISOコード生成の場合にのみ使用します。)

Java Virtual Machine(JVM)に渡すオプション(-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/jdk1.5.1/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

特殊処理のフラグ

通常、.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も暗黙的に設定されます。つまり、-compilefalseの場合は、コンパイルとカスタマイズの両方が省略されます。-compile=false-profile=trueを設定した場合、-profile設定は無視されます。


注意:

型の解決のために.javaファイルを参照する場合でも、-compilefalseに設定する方が適切な場合があります。たとえば、.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も暗黙的に設定されます。つまり、-compilefalseの場合は、コンパイルとカスタマイズの両方が省略されます。-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(ename, 1, :bind_var), sum(sal) FROM emp
              GROUP BY substr(ename, 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

セマンティクス・チェックとオフライン解析のオプション

次の各オプションで、オンラインおよびオフラインのセマンティクス・チェックとオフライン解析を指定します。

  • -offline

  • -online

  • -cache

  • -parse

これらのオプションを説明する前に、次の2項目について説明します。

  • OracleChecker(セマンティクス・チェックのデフォルトのフロントエンド・クラス)およびOracleのセマンティクス・チェッカ

  • オンライン・セマンティクス・チェックとオフライン解析との比較


注意:

「オンライン・セマンティクス・チェックとユーザー名(-user)」で説明したように、オンライン・セマンティクス・チェックは、トランスレータの-userオプションを設定することによって有効になります。ただし、この設定は、オフライン解析を有効または無効にする-parseオプションを設定することによって、オーバーライドできます。「オフライン・パーサー(-parse)」を参照してください。

セマンティクス・チェッカおよびOracleCheckerフロントエンド(デフォルトのチェッカ)

Oracleでは、Oracle専用のオフライン・チェッカ、汎用のオフライン・チェッカ、Oracle専用のオンライン・チェッカ、汎用のオンライン・チェッカが提供されています。汎用チェッカは、SQL-92エントリ・レベルおよびJDBCの標準機能のみを使用することを前提としています。Oracle Databaseを使用する場合は、Oracle専用チェッカを使用することをお薦めします。

デフォルトのチェッカは、オンライン・チェックおよびオフライン・チェックともoracle.sqlj.checker.OracleCheckerで、ほとんどの環境で十分に機能します。このクラスはフロントエンドとして機能し、使用する環境やオフラインとオンラインの選択に応じて、適切なセマンティクス・チェッカを実行します。

Oracleの場合は、Oracle Database 10g 、Oracle9i およびOracle8i タイプのOracle8チェッカ(対応するJDBC実装で使用)があります。

Oracle DatabaseとJDBCドライバによるオンライン・チェック

オンライン・チェックにOracle DatabaseとOracle JDBCドライバを使用する場合、データベースとJDBCドライバの低い方のバージョンにあわせて、OracleCheckerがチェッカを選択します。表8-4に、データベースのバージョンとJDBCドライバのバージョンとの組合せと、他の有効なOracleチェッカを一覧の形式で示します。

表8-4 OracleCheckerで選択されるOracleオンライン・セマンティクス・チェッカ

データベースのリリース JDBCのリリース オンライン・チェッカの選択 他の有効なオンライン・チェッカ

Oracle Database 10g 、Oracle9i またはOracle8i

Oracle11g

Oracle8JdbcChecker

Oracle8To7JdbcChecker


JDBCドライバによるオフライン・チェック

オフライン・チェックにOracle JDBCドライバを使用する場合、JDBCドライバのバージョンにあわせて、OracleCheckerがチェッカを選択します。チェッカの選択については、表8-5に要約します。

表8-5 OracleCheckerで選択されるOracleオフライン・セマンティクス・チェッカ

JDBCのリリース オフライン・チェッカの選択 他の有効なオフライン・チェッカ

Oracle11g

Oracle8OfflineChecker

なし


オンライン・セマンティクス・チェックとオフライン解析との比較

Oracle SQLJ実装は、オンライン・セマンティクス・チェックのかわりに限定的なチェックを提供する、オフライン解析と呼ばれる機能をサポートしています。オフライン解析はデータベース接続を使用しないため、データベース・スキーマに対する操作の検証は実行できませんが、SQL文とPL/SQL文すべての構文チェックを実行できます。(Oracle9iより前では、データベース接続なしで構文チェックを実行することはできません。)

オフライン解析およびオンライン・セマンティクス・チェックで提供される機能の比較を表8-6にまとめます。

表8-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チェックに使用されるパーサーは、このパーサーのみになります。標準のオフライン・パーサーとオンライン・チェックは、両方とも無効になります。

offline-onlynoneの設定は完全性のために提供されており、通常の操作モードではありません。-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

トランスレータによる代替環境のサポートとオプション

デフォルトで、Oracle Database 11g SQLJ実装はSun社のJDK 1.5.xの環境で実行するように構成され、Sun社のコンパイラjavacを使用するようになっています。ただし、これらは必須条件ではありません。SQLJは、他のJVMやコンパイラで機能するように設定することも可能です。この設定を行うには、SQLJで次の情報を指定する必要があります。

  • 使用するJVMの名前(-vmオプション)

  • 使用するJavaコンパイラの名前(-compiler-executableオプション)

  • コンパイラで必要な設定

この情報を指定する際には、一連のSQLJオプションを使用できます。また、デフォルトの設定では、SQLJでOracleプロファイル・カスタマイザが使用されますが、他のカスタマイザを指定することも可能です。


注意:

使用するオペレーティング・システムおよび環境による制限事項に注意してください。特に、完成し、展開されたSQLJコマンドラインのサイズが、許容されるコマンドラインの最大値サイズを超えないようにしてください。使用するオペレーティング・システムのドキュメントを参照してください。

ここでは、次の項目について説明します。

Javaおよびコンパイラのオプション

次の各オプションは、JVMおよびJavaコンパイラの操作を指定するオプションです。

  • -vm(JVMを指定。コマンドラインのみ。)

  • -compiler-executable(Javaコンパイラを指定。)

  • -compiler-encoding-flag

  • -compiler-output-file

  • -compiler-pipe-output-flag

標準javacをはじめとする一部のコンパイラでは、定義済のPublicクラスがあれば、それと同じ名前をJavaソース・ファイル名に付ける必要があります。このため、このファイル名がPublicクラス名と同じかどうかの検査が、SQLJトランスレータではデフォルトで実行されます。SQLJでこうした検証が実行されないように指定する場合は、-checkfilenameオプションを使用します。

JVMやコンパイラの設定によっては、SQLJでコンパイラを起動する通常の方法で、問題が発生する可能性があります。こうした問題を回避するには、-passesオプションを使用して、SQLJでの処理を2段階で実行します。-Jおよび-C接頭辞を指定すると、使用するJVMやコンパイラにオプションを直接渡すことが可能になります。


注意:

-vmオプション、-passesオプションおよび接頭辞-Jは、プロパティ・ファイルでは使用できません。これらはコマンドラインで設定する方法も、より簡単に環境変数SQLJ_OPTIONSで設定する方法もあります。

Java Virtual Machine(JVM)の名前(-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変数に基づいて実行可能ファイルの検索が開始されます。

使用するJavaコンパイラの要件は次のとおりです。

  • 標準の出力デバイス(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-flagfalseに設定します。たとえば、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)

デフォルトでは、Javaコンパイラはエラーおよびメッセージの出力をSTDERRに書き込みます。ただし、Javaコンパイラからのエラー・メッセージも、-compiler-output-fileオプションで指定した同じファイルにリダイレクトする必要がある場合は、このフラグをtrueに設定します。このオプションは、-compiler-output-fileと併用する場合にのみ有効です。

このフラグの設定は、コマンドラインまたはSQLJ_OPTIONS環境変数のみでなく、プロパティ・ファイルでも行えます。

このオプションのコマンドライン構文は、次のとおりです。

-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のような一部のコンパイラでは、ソース・ファイル名をPublicクラス名と同じ名前にする必要がありますが、そうでないコンパイラもあります。

コードの移植性を最大限に高めるには、このフラグを有効にしておく必要があります(デフォルトで有効になります)。


注意:

サーバー側での変換にはネーミング要件が伴わないため、-checkfilenameオプションは不要であり、トランスレータによる名前のチェックも実行されません。

このオプションのコマンドライン構文は、次のとおりです。

-checkfilename<=true|false>

次に例を示します。

-checkfilename=false

次に、このオプションのプロパティ・ファイルでの設定の構文を示します。

sqlj.checkfilename<=true|false>

次に例を示します。

sqlj.checkfilename=false

デフォルト値は次のとおりです。

true

SQLJでの2段階による実行(-passes)

デフォルトでは、sqljスクリプトを実行すると、次に示す処理が展開されます。

  1. sqljスクリプトによってJVMが起動され、SQLJトランスレータが実行されます。

  2. トランスレータによって、セマンティクス・チェックおよび.sqljファイルの変換が行われ、変換された.javaファイルが生成されます。

  3. トランスレータによってJavaコンパイラが起動され、生成済の.javaファイルがコンパイルされます。

  4. トランスレータによって、コンパイラの出力が処理されます。

  5. プロファイル・ファイルが生成されていなければ、トランスレータはプロファイル・カスタマイザを起動し、カスタマイズを実行します。

ただし、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スクリプトを実行すると、次に示す処理が展開されます。

  1. sqljスクリプトによってJVMが起動された後で、SQLJトランスレータでの1段階目の処理が実行されます。

  2. トランスレータによって、セマンティクス・チェックおよび.sqljファイルの変換が行われ、変換された.javaファイルが生成されます。

  3. JVMを終了します。

  4. sqljスクリプトによって、Javaコンパイラが起動され、生成済の.javaファイルがこのコンパイラでコンパイルされます。

  5. sqljスクリプトによってJVMが再び起動された後で、SQLJトランスレータでの2段階目の処理が実行されます。

  6. トランスレータによって、コンパイラの出力が処理されます。

  7. プロファイル・ファイルが生成されていなければ、JVMはプロファイル・カスタマイザを起動し、カスタマイズを実行します。

この手順では、JVMがJavaコンパイラを起動する際に発生する問題が回避されます。

このオプションのコマンドライン構文は、次のとおりです。

-passes

次に例を示します。

-passes

デフォルト値は次のとおりです。

off

カスタマイズのオプション

次の各オプションは、必要に応じて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)を使用すると、オプションをプロファイル・カスタマイザ・ハーネスに直接渡すことが可能になります。

一般的なカスタマイズ・オプションとOracle固有のカスタマイザ・オプションの詳細は、「カスタマイズ・オプションとカスタマイザの選択」を参照してください。