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ドライバ)を使用する必要があります

    関連項目:

    「SQLJ環境」

ノート:

Java Runtime Environment (JRE)は、Oracle Database 12c リリース2 (12.2)にインストールされるものも含めて、単独ではSQLJプログラムを変換できません。ただし、すでに変換およびコンパイルされているSQLJプログラムの実行に関しては、JREで十分です

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実装の環境変数PATHCLASSPATHは、次のように設定します。

  • 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環境で使用されています。必要に応じて、HRhrのかわりに別の値を使用します。

ノート:

デモ用アプリケーションを実行するには、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
# 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.propertiesthin 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コマンドライン・オプションを使用します。userpasswordurlおよび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!