Oracle Database 管理者リファレンス 10g リリース2(10.2) for UNIX Systems B19278-06 |
|
この章では、OracleプリコンパイラおよびOracle Call Interfaceの使用方法について説明します。次の項目について説明します。
Oracleプリコンパイラは、Oracle DatabaseのSQL文を高水準言語で記述されたプログラムと組み合せるためのアプリケーション開発ツールです。Oracleプリコンパイラは、ANSI SQLと互換性があり、Oracle Databaseやその他のANSI SQLデータベース管理システムで実行するオープンでカスタマイズされたアプリケーションを開発するために使用します。
次の項目について説明します。
Oracleプリコンパイラの構成ファイルは、$ORACLE_HOME/precomp/admin
ディレクトリにあります。表6-1に、各プリコンパイラの構成ファイルの名前を示します。
すべてのプリコンパイラ実行可能ファイルを再リンクするには、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で示した製品の実行可能ファイルで置き換えます。
表6-3に、プリコンパイラのREADMEファイルの場所を示します。READMEファイルには、前回のリリース以降にプリコンパイラに加えられた変更が記載されています。
プリコンパイラ | READMEファイル |
---|---|
Pro*C/C++ |
|
Pro*COBOL |
|
Pro*FORTRAN |
|
次の問題は、すべてのプリコンパイラに共通しています。
C言語以外では、コンパイラによって、大文字の関数やサブプログラム名が小文字に変換されます。この結果、ユーザーが存在しない旨のエラー・メッセージが表示されることがあります。このエラー・メッセージが表示された場合は、オプション・ファイル内の関数またはサブプログラム名の大/小文字が、IAPXTB表の文字と一致しているかどうかを確認してください。
プリコンパイラとベンダー提供のデバッガに互換性がない場合があります。デバッガを使用して動作したプログラムが、デバッガを使用しないときも同様に動作するとはかぎりません。
IRECLEN
およびORECLEN
の各パラメータの値IRECLEN
およびORECLEN
の各パラメータには、最大値がありません。
Oracleライブラリは、プリコンパイラやOCIまたはOCCIアプリケーションと静的または動的にリンクできます。静的リンクの場合、アプリケーション全体のライブラリおよびオブジェクトは、1つの実行可能プログラムにリンクされます。その結果、アプリケーションの実行可能ファイルが非常に大きくなることがあります。
動的リンクの場合、実行コードの一部分が実行可能プログラムに格納され、残りの部分はアプリケーションの実行時に動的にリンクされるライブラリに格納されます。実行時にリンクされるライブラリを、動的ライブラリまたは共有ライブラリと呼びます。動的リンクには、次のようないくつかのメリットがあります。
クライアント共有ライブラリとクライアント静的ライブラリは、$ORACLE_HOME/lib
ディレクトリまたは$ORACLE_HOME/lib32
ディレクトリにあります。オラクル社が提供しているMakeファイルdemo_
product
.mk
を使用してアプリケーションをリンクする場合は、デフォルトでクライアント共有ライブラリがリンクされます。
共有ライブラリ・パスの環境変数設定にクライアント共有ライブラリを含むディレクトリが指定されていない場合、実行可能ファイルの起動時に、次のようなエラー・メッセージのいずれかが表示される場合があります。
Cannot load library libclntsh.a Can't 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
ユーザーでログインし、次のコマンドを実行します。
$ $ORACLE_HOME/bin/genclntsh
HP-UX PA-RISCでは、非スレッド化クライアント共有ライブラリを使用できます。ただし、このライブラリは、スレッドを使用するOCIアプリケーションやスレッドに依存するOCIアプリケーションでは使用できません。
スレッドを使用しないアプリケーションにこのライブラリを使用するには、次のいずれかのコマンドを実行してOCIアプリケーションを作成します。
$ make -f demo_rdbms32.mk build_nopthread EXE=oci02 OBJS=oci02.o
$ make -f demo_rdbms.mk build_nopthread EXE=oci02 OBJS=oci02.o
次の表に、クライアント・アプリケーションについてサポートされるビット長(31ビット、32ビットまたは64ビット)を示します。
クライアント・アプリケーションのタイプ | サポートされるプラットフォーム |
---|---|
32ビットのみ |
Linux x86およびSolaris x86 |
64ビットのみ |
Tru64 UNIXおよびLinux Itanium |
32ビットおよび64ビット |
Linux on POWER、Solaris SPARC、Linux x86-64およびMac OS X |
31ビットおよび64ビット |
zSeries Linux |
AIX、HP-UX、Linux on POWER、Solaris SPARCおよびzSeries Linuxでは、Oracle Database 10g リリース2(10.2)とともに提供されているデモンストレーションおよびクライアント・アプリケーションはすべて、64ビット・モードでリンクおよび実行します。AIX、Linux on POWER、Solaris SPARCおよびHP-UXでは、同じOracleホーム・ディレクトリに32ビットおよび64ビットのクライアント・アプリケーションを作成できます。同様に、zSeries Linuxでは、同じOracleホーム・ディレクトリに31ビットおよび64ビットのクライアント・アプリケーションを作成できます。
次の表に、32ビットおよび64ビットのクライアント共有ライブラリを示します。
異なるワード・サイズが混在しているインストールを実装するには、次の手順を実行します。
$ $ORACLE_HOME/bin/genclntsh
プラットフォーム | 環境変数 |
---|---|
AIX |
|
HP-UX(32ビットのクライアント・アプリケーション) |
|
HP-UX、Linux on POWER、Linux x86、Linux x86-64、SolarisおよびTru64 UNIX |
|
Mac OS X |
|
32ビットおよび64ビットのPro*CおよびOracle Call Interface(OCI)カスタマ・アプリケーションをサポートするオペレーティング・システムでは、次のファイルに32ビットPro*CおよびOCIアプリケーションの作成方法が記載されています。
32ビットおよび64ビットのアプリケーションをサポートするプラットフォームでは、$ORACLE_HOME/bin
ディレクトリに32ビットおよび64ビットの実行可能ファイルが格納されています。さらに、次のディレクトリに32ビットのライブラリが格納されています。
$ORACLE_HOME/lib32
$ORACLE_HOME/rdbms/lib32
$ORACLE_HOME/hs/lib32
$ORACLE_HOME/network/lib32
$ORACLE_HOME/precomp/lib32
Pro*C/C++プリコンパイラを使用する場合は、事前にオペレーティング・システムの適切なバージョンのコンパイラが正しくインストールされていることを確認してください。
デモ・プログラムは、Pro*C/C++プリコンパイラの機能を紹介するために用意されています。デモ・プログラムには、C、C++およびObjectプログラムの3種類があります。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/proc
ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。
デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sql
スクリプトで作成したデモンストレーション表がSCOTTスキーマにあり、そのパスワードがTIGERであることが必要です。
デモ・プログラムを作成するには、$ORACLE_HOME/precomp/demo/proc/
ディレクトリにあるMakeファイルdemo_proc.mk
を使用します。たとえば、sample1
のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。
$ make -f demo_proc.mk sample1
Pro*C/C++のCデモ・プログラムをすべて作成するには、次のコマンドを実行します。
$ make -f demo_proc.mk samples
Pro*C/C++のC++デモ・プログラムをすべて作成するには、次のコマンドを実行します。
$ make -f demo_proc.mk cppsamples
Pro*C/C++のObjectデモ・プログラムをすべて作成するには、次のコマンドを実行します。
$ make -f demo_proc.mk object_samples
一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sql
ディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。
デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「make
マクロ引数RUNSQL=run
」をコマンドラインに追加します。たとえば、sample9
デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample9.sql
スクリプトを実行するには、次のコマンドを実行します。
$ make -f demo_proc.mk sample9 RUNSQL=run
Objectデモ・プログラムのすべてを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。
$ make -f demo_proc.mk object_samples RUNSQL=run
Makeファイル$ORACLE_HOME/precomp/demo/proc/demo_proc.mk
を使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_proc32.mk
を使用して、32ビット(zSeries Linuxの場合は31ビット)のユーザー・プログラムを作成することもできます。次の表に、Pro*C/C++により32ビット(または31ビット)および64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。
Makeファイルdemo_proc.mk
を使用してプログラムを作成する場合は、次のようなコマンドを実行します。
$ make -f demo_proc.mk target OBJS="objfile1 objfile2 ..." EXE=exename
各項目の意味は次のとおりです。
たとえば、Pro*C/C++ソース・ファイルmyprog.pc
からプログラムmyprog
を作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。
$ make -f demo_proc.mk build OBJS=myprog.o EXE=myprog
$ make -f demo_proc.mk build_static OBJS=myprog.o EXE=myprog
$ make -f demo_proc.mk cppbuild OBJS=myprog.o EXE=myprog
$ make -f demo_proc.mk cppbuild_static OBJS=myprog.o EXE=myprog
表6-4に、Pro*COBOLプリコンパイラのネーミング規則を示します。
項目 | ネーミング規則 |
---|---|
実行可能ファイル |
|
デモンストレーション・ディレクトリ |
|
Makeファイル |
|
Pro*COBOLでは、静的リンク、動的リンクまたは動的読取りプログラムをサポートしています。動的リンク・プログラムは、クライアント共有ライブラリを使用します。動的読取りプログラムは、$ORACLE_HOME/bin
ディレクトリにあるrtsora
(32ビットのCOBOLコンパイラの場合は、rtsora32
)実行可能ファイルを使用します。
この項では、Pro*COBOLで必要な環境変数について説明します。
Acucorp ACUCOBOL-GT COBOLコンパイラを使用するには、A_TERMCAP
、A_TERM
、PATH
およびLD_LIBRARY_PATH
環境変数を設定する必要があります。環境変数LD_LIBRARY_PATH
に正しいディレクトリが設定されていない場合は、プログラムのコンパイルまたは実行時に、次のようなエラー・メッセージが表示されます。
runcbl: error while loading shared libraries: libclntsh.so: cannot open shared object file: No such file or directory
a_termcap
ファイルの場所を指定するには環境変数A_TERMCAP
を設定し、そのファイルからサポートされる端末を指定するには環境変数A_TERM
を設定します。たとえば、次のように入力します。
$ A_TERMCAP=/opt/COBOL/etc/a_termcap $ A_TERM=vt100 $ export A_TERMCAP A_TERM
% setenv A_TERMCAP /opt/COBOL/etc/a_termcap % setenv A_TERM vt100
/opt/COBOL/bin
ディレクトリを含むように環境変数PATH
を設定します(zSeries Linuxシステムで31ビット・コンパイラを使用している場合は、/opt/COBOL31/bin
ディレクトリ)。
$ PATH=/opt/COBOL/bin:$PATH $ export PATH
% setenv PATH opt/COBOL/bin:${PATH}
環境変数LD_LIBRARY_PATH
には、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、コンパイラ・ライブラリが/opt/COBOL/lib
ディレクトリにインストールされている場合は、次のコマンドを実行します。
$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/COBOL/lib $ export LD_LIBRARY_PATH
% setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/COBOL/lib
Micro Focus Server Express COBOLコンパイラを使用するには、環境変数COBDIR
とPATH
および共有ライブラリ・パス環境変数を設定する必要があります。
共有ライブラリ・パス環境変数に$COBDIR/coblib
ディレクトリが設定されていない場合は、プログラムのコンパイルまたは実行時に、次のようなエラー・メッセージが表示されます。
rtsora: error while loading shared libraries: libcobrts_t.so: cannot open shared object file: No such file or directory
356835:rtsora: /sbin/loader: Fatal Error: Cannot map library libcobrts64_t.so.2
ld.so.1: rts32: fatal: libfhutil.so.2.0: Can't open file: errno=2
ld: rts32: fatal: libfhutil.so: Can't open file: errno=2
/usr/lib/hpux64/dld.so: Unable to find library 'libcobrts64_t.so.2'. Killed
環境変数COBDIR
には、コンパイラがインストールされているディレクトリを設定します。たとえば、コンパイラが/opt/lib/cobol
ディレクトリにインストールされている場合は、次のコマンドを実行します。
$ COBDIR=/opt/lib/cobol $ export COBDIR
% setenv COBDIR /opt/lib/cobol
$COBDIR/bin
ディレクトリを含むように環境変数PATH
を設定します。
$ PATH=$COBDIR/bin:$PATH $ export PATH
% setenv PATH ${COBDIR}/bin:${PATH}
環境変数LIBPATH
、LD_LIBRARY_PATH
またはSHLIB_PATH
には、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、プラットフォームで環境変数LD_LIBRARY_PATH
が使用されており、コンパイラ・ライブラリが$COBDIR/coblib
ディレクトリにインストールされている場合は、次のコマンドを実行します。
$ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$COBDIR/coblib $ export LD_LIBRARY_PATH
% setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$COBDIR/coblib
Oracleでは、動的読取りPro*COBOLプログラムを実行するために、rtsora
(64ビット・システムの32ビットCOBOLコンパイラの場合はrtsora32
)という専用のランタイム・システムを用意しています。動的読取りPro*COBOLプログラムを実行するには、cobrun
ランタイム・システムのかわりに、rtsora
(またはrtsora32
)ランタイム・システムを使用します。cobrun
を使用してPro*COBOLプログラムを実行すると、次のようなエラー・メッセージが表示されます。
$ cobrun sample1.gnt Load error : file 'SQLADR' error code: 173, pc=0, call=1, seg=0 173 Called program file not found in drive/directory
デモ・プログラムは、Pro*COBOLプリコンパイラの機能を紹介するために用意されています。デモ・プログラムは、$ORACLE_HOME/precomp/demo/procob2
ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。
デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sql
スクリプトで作成したデモンストレーション表がSCOTTスキーマにあり、そのパスワードがTIGERであることが必要です。
次のMakeファイルを使用してデモ・プログラムを作成します。
$ORACLE_HOME/precomp/demo/procob2/demo_procob.mk
sample1
というPro*COBOL用のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。
$ make -f demo_procob.mk sample1
Pro*COBOLデモ・プログラムを作成するには、次のコマンドを実行します。
$ make -f demo_procob.mk samples
rtsora
ランタイム・システムで使用する動的読取りプログラムsample1.gnt
を作成し、実行するには、次のコマンドを実行します。
$ make -f demo_procob.mk sample1.gnt $ rtsora sample1.gnt
一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sql
ディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。
デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「make
マクロ引数RUNSQL=run
」をコマンドに追加します。たとえば、sample9
デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample9.sql
スクリプトを実行するには、次のコマンドを実行します。
$ make -f demo_procob.mk sample9 RUNSQL=run
Pro*COBOLデモ・プログラムを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。
$ make -f demo_procob.mk samples RUNSQL=run
Makeファイル$ORACLE_HOME/precomp/demo/procob2/demo_procob.mk
を使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_procob_32.mk
を使用して、32ビット(または31ビット)のユーザー・プログラムを作成することもできます。次の表に、Pro*COBOLにより32ビット(または31ビット)および64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。
Makeファイルdemo_procob.mk
を使用してプログラムを作成する場合は、次のようなコマンドを実行します。
$ make -f demo_procob.mk target COBS="cobfile1 cobfile2 ..." EXE=exename
各項目の意味は次のとおりです。
たとえば、プログラムmyprog
を作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。
$ make -f demo_procob.mk build COBS=myprog.cob EXE=myprog
$ make -f demo_procob.mk build_static COBS=myprog.cob EXE=myprog
rtsora
(32ビットのCOBOLコンパイラの場合はrtsora32
)で使用するための動的読取りプログラムを作成するには、次のコマンドを実行します。
$ make -f demo_procob.mk myprog.gnt
FORMATプリコンパイラ・オプションは、COBOLの入力行の形式を指定します。デフォルト値のANSI
を指定した場合、列1〜6はオプションの順序番号、列7はコメントまたは継続行を示します。段落名は列8〜11で開始され、列12〜72が文となります。
値TERMINAL
を指定した場合、列1〜6は削除され、列7が左端の列になります。
Pro*FORTRANプリコンパイラを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。この項では、次の項目について説明します。
デモ・プログラムは、Pro*FORTRANプリコンパイラの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/profor
ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。
デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sql
スクリプトで作成したデモンストレーション表がSCOTTスキーマにあり、そのパスワードがTIGERであることが必要です。
デモ・プログラムを作成するには、$ORACLE_HOME/precomp/demo/profor
ディレクトリにあるMakeファイルdemo_profor.mk
を使用します。たとえば、sample1
のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。
$ make -f demo_profor.mk sample1
Pro*FORTRANのデモ・プログラムを作成するには、次のコマンドを実行します。
$ make -f demo_profor.mk samples
一部のデモ・プログラムでは、$ORACLE_HOME/precomp/demo/sql
ディレクトリ内にあるSQLスクリプトを実行する必要があります。このスクリプトを実行しないと、実行を要求するメッセージが表示されます。
デモ・プログラムを作成し、それに対応するSQLスクリプトを実行するには、「make
マクロ引数RUNSQL=run
」をコマンドラインに追加します。たとえば、sample11
デモ・プログラムを作成し、必要な$ORACLE_HOME/precomp/demo/sql/sample11.sql
スクリプトを実行するには、次のコマンドを実行します。
$ make -f demo_profor.mk sample11 RUNSQL=run
Pro*FORTRANのデモ・プログラムを作成し、必要なSQLスクリプトすべてを実行するには、次のコマンドを実行します。
$ make -f demo_profor.mk samples RUNSQL=run
Makeファイル$ORACLE_HOME/precomp/demo/profor/demo_profor.mk
を使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_profor_32.mk
を使用して、32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*FORTRANにより32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。
プラットフォーム | 64ビットMakeファイル | 32ビットMakeファイル |
---|---|---|
AIX、HP-UXおよびSolaris SPARC |
|
|
Tru64 UNIX |
|
該当なし |
Makeファイルdemo_proc.mk
を使用してプログラムを作成する場合は、次のようなコマンドを実行します。
$ make -f demo_profor.mk target FORS="forfile1 forfile2 ..." EXE=exename
各項目の意味は次のとおりです。
たとえば、Pro*FORTRANソース・ファイルmyprog.pfo
からプログラムmyprog
を作成する場合は、作成する実行可能ファイルのタイプに応じて、次のいずれかのコマンドを実行します。
$ make -f demo_profor.mk build FORS=myprog.f EXE=myprog
$ make -f demo_profor.mk build_static FORS=myprog.f EXE=myprog
SQL*Module for Adaを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。
デモ・プログラムは、SQL*Module for Adaの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/modada
ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。
ch1_drv
デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sql
スクリプトで作成したデモンストレーション表がSCOTTスキーマにあり、そのパスワードがTIGERであることが必要です。
demcalsp
およびdemohost
の各デモ・プログラムでは、大学のサンプル・データベースがMODTESTスキーマに存在している必要があります。適切なmake
コマンドを使用して、MODTESTスキーマを作成し、大学のサンプル・データベースをロードできます。
SQL*Module for Adaデモ・プログラムを作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、大学のサンプル・データベースを作成するには、次のコマンドを実行します。
$ make -f demo_modada.mk all RUNSQL=run
デモ・プログラム(demohost
)を1つのみ作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、大学のサンプル・データベースを作成するには、次のコマンドを実行します。
$ make -f demo_modada.mk makeuser loaddb demohost RUNSQL=run
SQL*Module for Adaデモ・プログラムを作成し、大学のサンプル・データベースを再作成しない場合は、次のコマンドを実行します。
$ make -f demo_modada.mk samples
デモ・プログラム(demohost
)を1つのみ作成し、大学のサンプル・データベースを再作成しない場合は、次のコマンドを実行します。
$ make -f demo_modada.mk demohost
プログラムを実行するには、Oracle Netの接続文字列を定義するか、または適切な表が存在しているデータベースに接続できるINST1_ALIASという別名を定義する必要があります。
Makeファイル$ORACLE_HOME/precomp/demo/modada/demo_modada.mk
を使用して、ユーザー・プログラムを作成できます。Makeファイルdemo_modada.mk
を使用してユーザー・プログラムを作成する場合は、次のようなコマンドを実行します。
$ make -f demo_modada.mk ada OBJS="module1 module2 ..." \ EXE=exename MODARGS=SQL_Module_arguments
各項目の意味は次のとおりです。
modulen
は、コンパイル済のAdaオブジェクトです。
exename
は、実行可能プログラムです。
SQL_Module_arguments
は、SQL*Moduleに渡されるコマンドライン引数です。Oracle Call Interface(OCI)またはOracle C++ Call Interface(OCCI)を使用する前に、適切なバージョンのCまたはC++がインストール済であることを確認してください。
デモ・プログラムは、ソフトウェアで提供されるOCIとOCCIの機能を紹介するために用意されています。デモ・プログラムには、CおよびC++プログラムの2種類があります。デモ・プログラムは、$ORACLE_HOME/rdbms/demo
ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。
デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sql
スクリプトで作成したデモンストレーション表がSCOTTスキーマにあり、そのパスワードがTIGERであることが必要です。
デモ・プログラムを作成するには、$ORACLE_HOME/rdbms/demo
ディレクトリにあるMakeファイルdemo_rdbms.mk
を使用します。たとえば、cdemo1
のデモ・プログラムをコンパイルおよびリンクするには、次のコマンドを実行します。
$ make -f demo_rdbms.mk cdemo1
OCIのCデモ・プログラムを作成するには、次のコマンドを実行します。
$ make -f demo_rdbms.mk demos
OCCIのC++デモ・プログラムを作成するには、次のコマンドを実行します。
$ make -f demo_rdbms.mk occidemos
Makeファイル$ORACLE_HOME/rdbms/demo/demo_rdbms.mk
を使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_rdbms32.mk
を使用して、32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*FORTRANにより32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。
Makeファイルdemo_rdbms.mk
を使用してプログラムを作成する場合は、次のようなコマンドを実行します。
$ make -f demo_rdbms.mk target OBJS="objfile1 objfile2 ..." EXE=exename
この例の各項目の意味は、次のとおりです。
たとえば、Cソース・ファイルmyprog.c
からプログラムmyprog
を作成する場合は、作成する実行可能ファイルのタイプに応じて、次のいずれかのコマンドを実行します。
$ make -f demo_rdbms.mk build OBJS=myprog.o EXE=myprog
$ make -f demo_rdbms.mk build_static OBJS=myprog.o EXE=myprog
たとえば、C++ソース・ファイルmyprog.cpp
からプログラムmyprog
を作成する場合は、作成する実行可能ファイルのタイプに応じて、次のいずれかのコマンドを実行します。
$ make -f demo_rdbms.mk buildc++ OBJS=myprog.o EXE=myprog
$ make -f demo_rdbms.mk buildc++_static OBJS=myprog.o EXE=myprog
64ビット・ドライバを使用するJDBC/OCIデモ・プログラムを実行するには、次の手順を実行します。
CLASSPATH
の先頭に$ORACLE_HOME/jdbc/lib/ojdbc14.jar
を追加します。
jdbc/demo/samples/jdbcoci/Makefile jdbc/demo/samples/generic/Inheritance/Inheritance1/Makefile jdbc/demo/samples/generic/Inheritance/Inheritance2/Makefile jdbc/demo/samples/generic/Inheritance/Inheritance3/Makefile jdbc/demo/samples/generic/JavaObject1/Makefile jdbc/demo/samples/generic/NestedCollection/Makefile
$ORACLE_HOME/jdbc/demo/samples/generic/Makefile
ファイル内で、JAVA変数とJAVAC変数を変更し、JDKの位置および-d64
フラグを次のように指定します。
JAVA=${ORACLE_HOME}/java/bin/java -d64 JAVAC=${ORACLE_HOME}/java/bin/javac -d64
Linux on POWER上でJAVA変数とJAVAC変数を変更し、64ビットJDKをインストールしたJDKの位置を次のように指定します。
JAVA=/opt/IBMJava2-ppc64-142/bin/java JAVAC=/opt/IBMJava2-ppc64-142/bin/javac
jdbc/demo/samples/generic/Makefile
ファイル内で、JAVAとJAVACが定義されている箇所を除き、JDK14_HOME
/bin/javac
の出現箇所をすべてJAVACで置き換え、JDK14_HOME
/bin/java
の出現箇所をすべてJAVAで置き換えます。
$ORACLE_HOME/lib
ディレクトリを含むように、環境変数LD_LIBRARY_PATH_64
を設定します。この章の製品別の項で説明したように、ユーザー・プログラムを作成する場合は、オラクル社がソフトウェアとともに提供するMakeファイルdemo_
product
.mk
を使用してください。このMakeファイルを変更する場合、またはカスタムMakeファイルを使用する場合は、次の制限事項に注意してください。
AIXを除いて、Oracleライブラリの順番がすべてのプラットフォームで重要である理由は、次のとおりです。
nmake
またはGNU make
などのmake
ユーティリティを使用する場合は、マクロおよび接頭辞の処理について、オペレーティング・システムで提供されているmake
ユーティリティとの違いに注意してください。OracleのMakeファイルは、make
ユーティリティによってテストおよびサポートされます。
demo_
product
.mk
を必ず使用してください。
オラクル社が提供しているsymfind
ユーティリティを使用すると、シンボルが定義されているライブラリまたはオブジェクト・ファイルの場所を確認する際に役立ちます。プログラムのリンク時に、未定義シンボルは一般的なエラーの1つとみなされ、次のようなエラー・メッセージが生成されます。
$ make -f demo_proc.mk sample1 Undefined first referenced symbol in file sqlcex sample1.o sqlglm sample1.o ld: fatal: Symbol referencing errors. No output written to sample1
このエラーは、参照するシンボルの定義をリンカーが検出できなかった場合に発生します。このエラー・メッセージが表示された場合は、シンボルが定義されているライブラリまたはオブジェクト・ファイルがリンク・ラインにあるかどうか、およびリンカーが検索しているファイルのディレクトリが正しいかどうかを確認します。
次の例は、symfind
ユーティリティの出力です。このユーティリティをsqlcex
シンボルの検索に使用しています。
$ symfind sqlcex SymFind - Find Symbol <sqlcex> in <**>.a, .o, .so ------------------------------------------------------ Command: /u01/app/oracle/product/10.2.0/bin/symfind sqlcex Local Directory: /u01/app/oracle/product/10.2.0 Output File: (none) Note: I do not traverse symbolic links Use '-v' option to show any symbolic links Locating Archive and Object files ... [11645] | 467572| 44|FUNC |GLOB |0 |8 |sqlcex ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libclntsh.sl [35] | 0| 44|FUNC |GLOB |0 |5 |sqlcex ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ./lib/libsql.a
このリリースで提供されているOracleライブラリは、スレッド・セーフです。このため、マルチスレッド・アプリケーションをサポートできます。
Oracle Databaseでは、2タスク通信にいくつかのシグナルが使用されます。シグナルは、プロセスがデータベースに接続するとユーザー・プロセスにインストールされ、切断すると削除されます。
表6-5に、Oracle Databaseで2タスク通信に使用されるシグナルを示します。
表に記載されているシグナルは、すべてのプリコンパイラ・アプリケーションに影響します。Oracleプロセスへの接続時に、SIGCLD(またはSIGCHLD)およびSIGPIPEにシグナル・ハンドラを1つのみインストールできます。osnsui()
ルーチンをコールして設定すると、複数のシグナル・ハンドラをSIGINT用にインストールできます。SIGINTの場合は、osnsui()
およびosncui()
を使用して、シグナル受取りルーチンを登録および削除します。
また、必要に応じて、他のシグナルにもシグナル・ハンドラをインストールできます。Oracleプロセスに接続していない場合は、複数のシグナル・ハンドラをインストールできます。
例6-1に、シグナル・ルーチンおよび受取りルーチンの設定方法を示します。
/* user side interrupt set */ word osnsui( /*_ word *handlp, void (*astp), char * ctx, _*/) /* ** osnsui: Operating System dependent Network Set User-side Interrupt. Add an ** interrupt handling procedure astp. Whenever a user interrupt(such as a ^C) ** occurs, call astp with argument ctx. Put in *handlp handle for this ** handler so that it may be cleared with osncui. Note that there may be many ** handlers; each should be cleared using osncui. An error code is returned if ** an error occurs. */ /* user side interrupt clear */ word osncui( /*_ word handle _*/ ); /* ** osncui: Operating System dependent Clear User-side Interrupt. Clear the ** specified handler. The argument is the handle obtained from osnsui. An error ** code is returned if an error occurs. */
例6-2に、アプリケーション・プログラムでのosnsui()
およびosncui()
ルーチンの使用方法を示します。
/* ** User interrupt handler template. */ void sig_handler() { ... } main(argc, argv) int arc; char **argv; { int handle, err; ... /* Set up the user interrupt handler */ if (err = osnsui(&handle, sig_handler, (char *) 0)) { /* If the return value is nonzero, then an error has occurred Take appropriate action for the error. */ ... } ... /* Clear the interrupt handler */ if (err = osncui(handle)) { /* If the return value is nonzero, then an error has occurred Take appropriate action for the error. */ ... } ... }
Oracle XAは、X/Open Distributed Transaction Processing(DTP)XAインタフェースのOracle実装です。XA標準には、トランザクション内の共有リソースへのアクセスを制御するリソース・マネージャ間や、トランザクションを監視および解決するトランザクション・サービス間の双方向インタフェースが規定されています。
Oracle Call Interfaceには、XA機能があります。TPモニターXAアプリケーションを作成するときは、TPモニター・ライブラリ(シンボルax_reg
およびax_unreg
を定義するライブラリ)が、リンク・ラインでOracle Client共有ライブラリより前に設定されていることを確認してください。このリンク制限は、XAの動的登録(Oracle XAスイッチxaoswd
)を使用する場合に必要です。
Oracle DatabaseのXAコールは、クライアント共有ライブラリ(プラットフォームに応じてlibclntsh.a
、libclntsh.sl
、libclntsh.so
またはlibclntsh.dylib
)およびクライアント静的ライブラリ(libclntst10.a
)の両方で定義されています。これらのライブラリは、$ORACLE_HOME/lib
ディレクトリにあります。