Operating Systems
6 Oracle プリコンパイラおよび Oracle Call Interface の使用
6.1 Oracleプリコンパイラの概要
Release 19
データベース管理者リファレンス for Linux and UNIX System-Based
Operating Systems
6 Oracle プリコンパイラおよび Oracle
Oracleプリコンパイラは、Oracle DatabaseのSQL文を高水準言語で記述されたプログラムと組み合 せるためのアプリケーション開発ツールです。Oracleプリコンパイラは、ANSI SQLと互換性があ り、Oracle Databaseやその他のANSI SQLデータベース管理システムで実行するオープンでカスタ マイズされたアプリケーションを開発するために使用します。
この項では、次の項目について説明します。
プリコンパイラ構成ファイル
プリコンパイラ実行可能ファイルの再リンク すべてのプリコンパイラに共通の問題
静的および動的リンク
クライアント共有ライブラリとクライアント静的ライブラリ 注意:
この項で示すORACLE_HOMEは、「管理者」インストール・タイプを使用し てOracle Database Client 19cをインストールするときに作成され
るORACLE_HOMEを指します。
読取り専用Oracleホームを構成している場合は、デモ・ディレクトリ
をORACLE_HOMEからORACLE_BASE_HOMEにコピーする必要があります。詳細
は、『Oracle Databaseインストレーション・ガイド for Linux』 を参照してくださ い。
6.1.1 プリコンパイラ構成ファイル
Oracleプリコンパイラの構成ファイルは、$ORACLE_HOME/precomp/adminディレクトリにあり ます。
次の表に、各プリコンパイラの構成ファイルの名前を示します。
表6-1 Oracleプリコンパイラのシステム構成ファイル
製品 構成ファイル
Pro*C/C++ pcscfg.cfg
Pro*COBOL pcbcfg.cfg
Pro*FORTRAN (IBM AIX on POWER Systems (64-Bit)、HP-UXおよびOracle
Solaris) pccfor.cfg
Object Type Translator ottcfg.cfg
SQL*Module for Ada (IBM AIX on POWER Systems (64-Bit)) pmscfg.cfg
6.1.2 プリコンパイラ実行可能ファイルの再リンク
すべてのプリコンパイラ実行可能ファイルを再リンクするには、Makeファイ
ル$ORACLE_HOME/precomp/lib/ins_precomp.mkを使用します。特定のプリコンパイラ実行 可能ファイルを手動で再リンクするには、次のコマンドを入力します。
$ make -f ins_precomp.mk relink exename = executable_name
このコマンドを実行すると、最初に、新しい実行可能ファイル
が$ORACLE_HOME/precomp/libディレクトリに作成され、次にそのファイル が$ORACLE_HOME/binディレクトリに移動されます。
この例では、executableを表6-2で示した製品の実行可能ファイルで置き換えます。
次の表に、Oracleプリコンパイラの実行可能ファイルを示します。
表6-2 Oracleプリコンパイラの実行可能ファイル
製品 実行可能ファイル
Pro*FORTRAN 32ビット(Oracle Solaris、HP-UXおよびIBM AIX on POWER
Systems (64-Bit)) profor
Pro*COBOL 32ビット(Oracle Solaris、HP-UXおよびIBM AIX on POWER
Systems (64-Bit)) procob
Pro*COBOL (Oracle Solaris、HP-UXおよびIBM AIX on POWER Systems
(64-Bit)) procobまたはrtsora
Pro*C/C++ 32ビット(HP-UX) proc
Pro*FORTRAN (HP-UX) profor
SQL*Module for Ada (IBM AIX on POWER Systems (64-Bit)) modada
6.1.3 すべてのプリコンパイラに共通の問題
次の問題は、すべてのプリコンパイラに共通しています。
大文字から小文字への変換
C言語以外では、コンパイラによって、大文字の関数やサブプログラム名が小文字に変換さ れます。これが、No such user existsエラー・メッセージの原因になる可能性があり ます。このエラー・メッセージが表示された場合は、オプション・ファイル内の関数または
サブプログラム名の大/小文字が、IAPXTB表の文字と一致しているかどうかを確認してくだ さい。
ベンダー提供のデバッガ・プログラム
プリコンパイラとベンダー提供のデバッガに互換性がない場合があります。デバッガを使用 して動作したプログラムが、デバッガを使用しないときも同様に動作するとはかぎりませ ん。
IRECLENおよびORECLENの各パラメータの値
IRECLENおよびORECLENの各パラメータには、最大値がありません。
6.1.4 静的および動的リンク
Oracleライブラリは、プリコンパイラやOCIまたはOCCIアプリケーションと静的または動的にリン
クできます。静的リンクの場合、アプリケーション全体のライブラリおよびオブジェクトは、1つ の実行可能プログラムにリンクされます。その結果、アプリケーションの実行可能ファイルが非 常に大きくなることがあります。
動的リンクの場合、実行コードの一部分が実行可能プログラムに格納され、残りの部分はアプリ ケーションの実行時に動的にリンクされるライブラリに格納されます。実行時にリンクされるラ イブラリを、動的ライブラリまたは共有ライブラリと呼びます。動的リンクには、次のようない くつかのメリットがあります。
ディスク領域要件が少なくなります。複数のアプリケーションで、または同一アプリケーシ ョンのコールで、同じ動的ライブラリを使用できます。
メイン・メモリー要件が少なくなります。同一の動的ライブラリ・イメージをメイン・メモ リーに一度ロードしておくと、複数のアプリケーションでそれを共有できます。
6.1.5 クライアント共有ライブラリとクライアント静的ライブラリ
クライアント共有ライブラリとクライアント静的ライブラリは、$ORACLE_HOME/libにありま す。オラクル社が提供しているdemo_product.mkファイルを使用してアプリケーションをリン クする場合は、デフォルトでクライアント共有ライブラリがリンクされます。
共有ライブラリ・パスの環境変数設定にクライアント共有ライブラリを含むディレクトリが指定 されていない場合、実行可能ファイルの起動時に、次のようなエラー・メッセージのいずれかが 表示される場合があります。
Cannot load library libclntsh.a
cannot open shared library: .../libclntsh.sl.10.1 libclntsh.so.10.1: can't open file: errno=2
can't open library: .../libclntsh.dylib.10.1 Cannot map libclntsh.so
このエラーを防ぐには、共有ライブラリ・パスの環境変数を設定し、適切なディレクトリを指定 します。次の表に、環境変数名のサンプル設定を示します。プラットフォームで32ビットおよ び64ビットのアプリケーションがどちらもサポートされている場合、実行するアプリケーション に応じて、正しいディレクトリを指定してください。
プラットフォーム 環境変数 サンプル設定
Oracle Solaris (32ビットおよび64ビッ
ト・アプリケーション)およびLinux LD_LIBRARY_PATH $ORACLE_HOME/lib IBM AIX on POWER Systems (32ビッ
トおよび64ビット・アプリケーショ ン)
LIBPATH $ORACLE_HOME/lib
HP-UX (32ビット・アプリケーショ
ン) SHLIB_PATH $ORACLE_HOME/lib
HP-UX (64ビット・アプリケーショ
ン) LD_LIBRARY_PATH $ORACLE_HOME/lib
クライアント共有ライブラリは、インストール時に自動的に作成されます。再作成する必要があ る場合は、次の手順を実行します。
1. クライアント共有ライブラリを使用するすべてのクライアント・アプリケーションを終了し ます。この中には、SQL*PlusやOracle Recovery ManagerなどのOracle Clientアプリケーション もすべて含まれます。
2. oracleユーザーでログインし、次のコマンドを実行します。
$ $ORACLE_HOME/bin/genclntsh
非スレッドのクライアント共有ライブラリ
注意: この項の内容は、HP-UXシステムに適用されます。
HP-UXでは、非スレッドのクライアント共有ライブラリを使用できます。ただし、このライブラ
リは、スレッドを使用する、またはスレッドに依存するOCIアプリケーションでは使用できませ ん。
スレッドを使用しないアプリケーションでこのライブラリを使用するには、次のコマンドを実行 して32および64ビットのOCIアプリケーションを作成します。
$ make -f demo_rdbms.mk build_nopthread EXE=oci02 OBJS=oci02.o
6.1.6 クライアントの静的ライブラリの生成
クライアントの静的ライブラリにアプリケーションをリンクする場合は、最初に静的ライブラリ を生成する必要があります。
クライアントの静的ライブラリ(libclntst12.a)は、Oracle Databaseのインストール時に生成さ れません。クライアントの静的ライブラリにアプリケーションをリンクする場合は、最初に静的 ライブラリを生成する必要があります。
1. ユーザーをOracleインストール所有者(oracle)に切り替えます。
2. ORACLE_HOME環境変数を設定して、Oracle Databaseのインストールに使用したOracleホー ム・ディレクトリを指定します。次に例を示します。
Bourne、BashまたはKornシェル:
$ ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
$ export ORACLE_HOME
Cシェルの場合:
% setenv ORACLE_HOME /u01/app/oracle/product/19.0.0/dbhome_1
3. 次のコマンドを入力します。
$ $ORACLE_HOME/bin/genclntst