2 スタート・ガイド
この章では、Oracle SQLJインストールと設定をテストし、簡単なアプリケーションを実行します。
この章では、以下のトピックについて説明します。
2.1 前提と要件
ここでは、SQLJを実行するための環境の前提とシステム要件を、次の項目に従って説明します。
2.1.1 環境に対する前提
Oracle SQLJ実装を実行するシステムでは、次の内容を前提とします。
-
使用しているシステム上で実行できる標準Java環境があること。通常は、Sun社のJava Development Kit(JDK)を使用しますが、他のJava環境も使用できます。Java(通常は
java
)とJavaコンパイラ(通常はjavac
)を実行できることを確認してください。標準JDK上でSQLJアプリケーションを変換して実行するには、JDK 6またはJDK 7を使用する必要があります。SQLJと同じバージョンのJDBCドライバ(ThinドライバまたはOCI8ドライバ)を使用する必要があります
関連項目:
注意:
Java Runtime Environment (JRE)は、Oracle Database 12c リリース2 (12.2)にインストールされるものも含めて、単独ではSQLJプログラムを変換できません。ただし、すでに変換およびコンパイルされているSQLJプログラムの実行に関しては、JREで十分です。
-
使用している環境で、JDBCアプリケーションを実行できること。
2.1.2 Oracle SQLJ実装を使用するための要件
Oracle SQLJ実装を使用するには、次のものが必要です。
-
JDBCドライバを使用してアクセスできるデータベース・システム
-
SQLJトランスレータ用クラス・ファイル
トランスレータ関連クラスは、次のファイル内で使用可能です。
ORACLE_HOME
/sqlj/lib/translator.jar
注意:
translator.jar
の詳細は、「PATHとCLASSPATHの設定」を参照してください。
-
SQLJランタイム用クラス・ファイル
ORACLE_HOME
/sqlj/lib/runtime12.jar
注意:
Oracle Database 11g リリース1以降、
runtime12ee.jar
は非推奨になりました。かわりに、runtime12.jar
を使用してください。
2.1.3 SQLJ環境
完全な動作環境を確保するために、環境を様々な角度から(SQLJとそのコード生成モード、JDBCおよびJDKなど)考慮する必要があります。
注意:
コード生成は、SQLJの-codegen
オプションによって決まります。詳細は、「コードの生成(-codegen)」を参照してください。
Oracle固有コード生成の一般的な環境設定を次に示します。
-
SQLJコード生成:
-codegen=oracle
(デフォルト) -
SQLJ変換ライブラリ:
translator.jar
-
SQLJランタイム・ライブラリ:
runtime12.jar
-
JDBCドライバ: Oracle Database 12c リリース2 (12.2)
-
JDKバージョン: 6または7
注意:
異なるバージョンのJDBCに対して実行する場合は、古い方のバージョンに対して変換します。
2.1.4 環境に関する考慮事項
アプリケーションは、コードを変換したバージョン以上のバージョンのJDKに対して実行できます。
注意:
translator.jar
の詳細は、「PATHとCLASSPATHの設定」を参照してください。
2.1.5 SQLJの下位互換性
Oracle SQLJ実装の下位互換性に関して、次の点に注意する必要があります。
-
現行より前のリリースのSQLJトランスレータで生成されたコードは、引き続き、現行のランタイム・ライブラリに対して実行およびコンパイルできます。ただし、「環境に関する考慮事項」で説明した相互の互換性の制限事項が適用されます。
-
Oracle固有のトランスレータ出力(デフォルトの
-codegen=oracle
設定で生成されたコード)は、runtime12.jar
ライブラリを使用して、作成および実行する必要があります。また、次のことに注意してください。-
前述のコードは、今後のOracle JDBCおよびSQLJ実装で実行できるようになる予定です。
-
ただし、前述のコードは、Oracle JDBCドライバおよびOracle SQLJランタイムの以前のリリースでは実行できなくなります。この状況では、コードを再変換する必要があります。
-
2.2 インストールおよび設定の確認
前述の前提と要件が満たされていることを確認した後、SQLJインストールを確認します。Oracle Database 12c リリース2 (12.2)の場合、インストール時にSQLJおよびデモ・アプリケーションがインストールされることに注意してください。次の操作を実行する必要があります。
2.2.1 SQLJおよびデモ用アプリケーションの可用性の確認
Oracle Database 12c リリース2 (12.2)の場合、インストール時にSQLJおよびデモ・アプリケーションがインストールされます。
2.2.2 インストール先のディレクトリとファイルの確認
次のディレクトリがインストールされ、その中にファイルが格納されていることを確認します。
JDBCのディレクトリ
システムにインストールする必要のあるJDBCファイルの詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。
SQLJのディレクトリ
Oracle Database 12c リリース2 (12.2) Java環境をインストールすると、sqlj
ディレクトリがORACLE_HOME
ディレクトリの下に作成されます。sqlj
ディレクトリには次のサブディレクトリがあります。
-
demo
(この章で説明するものを含むデモ用アプリケーション) -
lib
(SQLJのクラス・ファイルを含む.jar
ファイル)
これらのディレクトリがすべて作成され、ファイルが格納されたことを確認してください。特に、lib
は重要なディレクトリです。
ORACLE_HOME
/bin
ディレクトリには、SQLJ実行可能ファイルを含む、すべてのJava製品分野で使用できるユーティリティが格納されています。
2.2.3 PATHとCLASSPATHの設定
環境変数PATH
およびCLASSPATH
が、Oracle SQLJ実装用に設定されていることを確認します。Oracle SQLJ実装の環境変数PATH
とCLASSPATH
は、次のように設定します。
-
PATH
の設定絶対パスを指定せずに
sqlj
スクリプト(SQLJトランスレータを起動するスクリプト)を実行する場合には、環境変数PATH
に次のディレクトリが指定してあることを確認してください。ORACLE_HOME/bin
Microsoft Windowsでは円記号(\)を使用します。
ORACLE_HOME
には、実際のOracleホーム・ディレクトリを指定します。 -
CLASSPATH
の設定環境変数
CLASSPATH
を変更して、カレント・ディレクトリと次の設定を指定します。ORACLE_HOME/sqlj/lib/translator.jar
Microsoft Windowsでは円記号(\)を使用します。
ORACLE_HOME
には、実際のOracleホーム・ディレクトリを指定します。CLASSPATH
に、次のランタイム・ライブラリを指定します。ORACLE_HOME/sqlj/lib/runtime12.jar
また、
CLASSPATH
に、次のJDBC JARファイルを含める必要があります。ORACLE_HOME/jdbc/lib/ojdbc6.jar ORACLE_HOME/jdbc/lib/ojdbc7.jar
注意:
-
SQLJプログラムをJDK 6環境で変換または実行するにはCLASSPATHに
ojdbc6.jar
を指定し、SQLJプログラムをJDK 7環境で変換または実行するにはCLASSPATHにojdbc7.jar
を指定する必要があります。Oracle Databaseへの接続で実行時に正しいJDBC JARが使用されることを確認してください。 -
ランタイム・ライブラリを追加しない場合は、SQLJトランスレータを実行できません。
CLASSPATH
にランタイム・ライブラリとトランスレータ・ライブラリを指定する必要があります。SQLJが適切にインストールされていることと、SQLJ、JDBCおよびJavaのバージョン情報を確認するには、次のコマンドを実行します。
% sqlj -version-long
-
2.2.4 sqljutlパッケージのインストールの確認
sqljutl
パッケージは、Oracle Databaseインスタンスのストアド・プロシージャとストアド・ファンクションのオンライン・チェックを行うために使用します。パッケージは、Java対応データベース用のサーバー側Java Virtual Machine (JVM)のインストール中に、SYS
スキーマの下に自動的にインストールされます。Java対応でないデータベースを使用している場合は、このパッケージを手動でインストールする必要があります。
sqljutl
のインストールを確認するには、SQL*Plusから次のSQLコマンドを実行します。
describe sys.sqljutl
このコマンドを実行すると、パッケージの簡単な説明が出力されます。
パッケージが見つからないというメッセージが表示された場合、またはパッケージの更新版をインストールする場合は、SQL*Plusを使用して次の場所にあるsqljutl.sql
スクリプトを実行します。
ORACLE_HOME/sqlj/lib/sqljutl.sql
2.3 設定のテスト
データベース、JDBCおよびSQLJセットアップをテストするには、次のソース・ファイルに定義されたデモ用アプリケーションを使用します。
-
TestInstallCreateTable.java
-
TestInstallJDBC.java
-
TestInstallSQLJ.sqlj
-
TestInstallSQLJChecker.sqlj
データベース接続の設定に役立つJavaプロパティ・ファイル(connect.properties
)もあります。このファイルを編集して、適切なユーザー、パスワードおよびURL値を設定する必要があります。
この項で説明するデモ用アプリケーションは、SQLJインストールによりdemo
ディレクトリ中に格納されます。
ORACLE_HOME/sqlj/demo
必要に応じて一部のソース・ファイルを変更し、変換やコンパイルを行う必要がある場合があります。Oracle SQLJ実装で提供されるデモ用アプリケーションでは、ユーザー名HR
およびパスワードhr
のOracle Databaseアカウントで表を参照します。このアカウントは、ほとんどのOracle Database環境で使用されています。必要に応じて、HR
とhr
のかわりに別の値を使用します。
注意:
デモ用アプリケーションを実行するには、demo
ディレクトリをカレント・ディレクトリにし、このカレント・ディレクトリ(「.
」)をCLASSPATH
で指定する必要があります。
この項の内容は次のとおりです。
2.3.1 ランタイム接続の設定
ここでは、connect.properties
ファイルを変更し、Oracleにランタイム接続を設定します。このファイルはdemo
ディレクトリにあり、次のように記述されています。
注意:
Oracle Database 12c リリース2 (12.2)のJDBC実装では、SIDを使用したデータベースURL接続文字列は非推奨です。次に例を示します(orcl
がSID)。
jdbc:oracle:thin:@localhost:5221:orcl
警告が生成されますが、致命的なエラーではありません。かわりに、次の例のようにmyservice
などのデータベース・サービス名を使用することをお薦めします。
jdbc:oracle:thin:@localhost:5221/myservice
データベース・サービス名の詳細は、『Oracle Database JDBC開発者ガイド』を参照してください。
# Users should uncomment one of the following URLs or add their own. # (If using Thin, edit as appropriate.) #sqlj.url=jdbc:oracle:thin:@localhost:5221/myservice #sqlj.url=jdbc:oracle:oci:@ # # User name and password here sqlj.user=HR sqlj.password=hr
Oracle JDBCドライバを使用した接続
新しいコードのOracle JDBC OCIドライバでは、接続文字列にoci
を使用します。ただし、下位互換性のために、oci8
も使用できます。したがって、既存のコードを変更する必要はありません。
JDBC Thinドライバを使用する場合は、connect.properties
のthin
URL行のコメントアウトを解除し、Oracle接続に合わせて変更します。URLは、JDBCドライバの設定時に指定したURLを使用してください。
2.3.2 データベース検証用の表の作成
ここでのテストでは、SALES
という表を使用します。次のようにTestInstallCreateTable
をコンパイルおよび実行します。
% javac TestInstallCreateTable.java % java TestInstallCreateTable
データベースおよびJDBCドライバが動作しており、connect.properties
ファイル内の接続設定が適切である場合、表が作成されます。
注意:
SALES
表がスキーマにすでにあり、それを変更しない場合は、TestInstallCreateTable.java
を編集して表の名前を変更します。または、元の表を削除して、新しい表に置き換えます。
TestInstallCreateTable
を使用しない場合は、次のSQL文を使用してSALES
表を作成できます。
CREATE TABLE SALES ( ITEM_NUMBER NUMBER, ITEM_NAME CHAR(30), SALES_DATE DATE, COST NUMBER, SALES_REP_NUMBER NUMBER, SALES_REP_NAME CHAR(20));
2.3.3 JDBCドライバの検証
Oracle JDBCドライバをさらに詳しく調べる場合は、TestInstallJDBC
デモを使用します。接続がconnect.properties
ファイルに正しく設定されていることを確認します。その後、次のようにTestInstallJDBC
をコンパイルして実行します。
% javac TestInstallJDBC.java % java TestInstallJDBC
次のように出力されます。
Hello, JDBC!
2.3.4 SQLJトランスレータとランタイムの検証
TestInstallJDBC
と似た機能を持つSQLJアプリケーションのTestInstallSQLJ
デモを、変換して実行してみます。次のコマンドを使用して、ソースを変換します。
% sqlj TestInstallSQLJ.sqlj
このコマンドではアプリケーションのコンパイルも行われることに注意してください。
UNIX環境では、sqlj
スクリプトはORACLE_HOME
/bin
にあります(このパスはPATH
に指定しておく必要があります)。Windowsでは、bin
ディレクトリのsqlj.exe
実行可能ファイルを使用します。SQLJ translator.jar
ファイルには、SQLJトランスレータおよびランタイムのクラス・ファイルが含まれています。これはORACLE_HOME
/sqlj/lib
にあり、このパスはCLASSPATH
に指定しておく必要があります。
関連項目:
次のコマンドを実行して、アプリケーションを実行します。
% java TestInstallSQLJ
次のように出力されます。
Hello, SQLJ!
2.3.5 SQLJトランスレータからデータベースへの接続の検証
SQLJトランスレータをデータベースに接続できる場合、変換時にSQL操作のオンラインのセマンティクス・チェックを実行できます。SQLJトランスレータはJavaで記述されており、JDBCを使用して必要な情報を指定されたデータベース接続から取得します。オンラインのセマンティクス・チェックの接続パラメータを指定するには、sqlj
スクリプト・コマンドラインまたはSQLJプロパティ・ファイル(デフォルトでは、sqlj.properties
)を使用します。
demo
ディレクトリで、sqlj.properties
ファイルを編集し、必要に応じてsqlj.password
行、sqlj.url
行およびsqlj.driver
行に対して更新、コメントアウトまたはコメントアウトの解除を行い、データベース接続情報に反映します。詳細は、sqlj.properties
ファイルのコメントを参照してください。
Oracle JDBC OCIドライバを使用する場合の、ドライバ、URLおよびパスワードの設定例を次に示します。
sqlj.url=jdbc:oracle:oci:@ sqlj.driver=oracle.jdbc.OracleDriver sqlj.password=hr
オンラインのセマンティクス・チェックは、変換時の接続に対してユーザー名を指定した時点で有効になります。ユーザー名を指定するには、sqlj.properties
ファイルのsqlj.user
行のコメントアウトを解除するか、-user
コマンドライン・オプションを使用します。user
、password
、url
およびdriver
オプションは、コマンドラインまたはプロパティ・ファイルで設定できます。
関連項目:
オンラインのセマンティクス・チェックをテストするには、次のようにTestInstallSQLJChecker.sqlj
ファイル(demo
ディレクトリ)を変換します。(または、別のユーザー名を使用してテストする方法もあります。)
% sqlj -user=HR TestInstallSQLJChecker.sqlj
Oracle JDBCドライバを使用している場合は、次のエラー・メッセージが表示されます。
TestInstallSQLJChecker.sqlj:41: Warning: Unable to check SQL query. Error returned by database is: ORA-00904: invalid column name
TestInstallSQLJChecker.sqlj
を編集して、行41のエラーを修正します。列名は、ITEM_NAMAE
ではなくITEM_NAME
である必要があります。このように変更すると、次のコマンドを使用してエラーなしでアプリケーションを変換および実行できます。
% sqlj -user=HR TestInstallSQLJChecker.sqlj % java TestInstallSQLJChecker
正常に処理されると、次の行が表示されます。
Hello, SQLJ Checker!