プライマリ・コンテンツに移動
Oracle® Database管理者リファレンス
11gリリース2 (11.2) for Linux and UNIX-Based Operating Systems
B56317-12
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

6 OracleプリコンパイラおよびOracle Call Interfaceの使用

この章では、OracleプリコンパイラおよびOracle Call Interfaceの使用方法について説明します。内容は次のとおりです。


注意:

この章で説明するデモンストレーションを使用するには、Oracle Database 11g Examplesメディアに収録されているOracle Database Examplesをインストールしてください。

6.1 Oracleプリコンパイラの概要

Oracleプリコンパイラは、Oracle DatabaseのSQL文を高水準言語で記述されたプログラムと組み合せるためのアプリケーション開発ツールです。Oracleプリコンパイラは、ANSI SQLと互換性があり、Oracle Databaseやその他のANSI SQLデータベース管理システムで実行するオープンでカスタマイズされたアプリケーションを開発するために使用します。

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


注意:

この項で示すORACLE_HOMEは、「管理者」インストール・タイプを使用してOracle Database Client 11gをインストールするときに作成されるORACLE_HOMEを指します。

6.1.1 プリコンパイラ構成ファイル

Oracleプリコンパイラの構成ファイルは、$ORACLE_HOME/precomp/adminディレクトリにあります。

表6-1に、各プリコンパイラの構成ファイルの名前を示します。

表6-1 Oracleプリコンパイラのシステム構成ファイル

製品 構成ファイル

Pro*C/C++

pcscfg.cfg

Pro*COBOL

pcbcfg.cfg

Pro*FORTRAN(AIX、HP-UXおよびSolaris)

pccfor.cfg

Object Type Translator

ottcfg.cfg

SQL*Module for Ada(AIX)

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で示した製品の実行可能ファイルで置き換えます。

表6-2に、Oracleプリコンパイラの実行可能ファイルを示します。

表6-2 Oracleプリコンパイラの実行可能ファイル

製品 実行可能ファイル

Pro*C/C++ 32ビット(HP-UXおよびIBM: Linux on System z)

proc

Pro*COBOL(AIX、HP-UXおよびSolaris)

procobまたはrtsora

Pro*COBOL 32ビット(AIX、HP-UX、SolarisおよびIBM: Linux on System z)

procob

Pro*FORTRAN(HP-UX)

profor

Pro*FORTRAN 32ビット(AIX、HP-UXおよびSolaris)

profor

SQL*Module for Ada(AIX)

modada


6.1.3 プリコンパイラのREADMEファイル

READMEファイルには、前回のリリース以降にプリコンパイラに加えられた変更が記載されています。

表6-3に、プリコンパイラのREADMEファイルの場所を示します。

表6-3 プリコンパイラのREADMEファイルの保存場所

プリコンパイラ READMEファイル

Pro*C/C++

$ORACLE_HOME/precomp/doc/proc/readme.doc

Pro*COBOL

$ORACLE_HOME/precomp/doc/procob2/readme.doc

Pro*FORTRAN

$ORACLE_HOME/precomp/doc/pro1x/readme.txt


6.1.4 すべてのプリコンパイラに共通の問題

次の問題は、すべてのプリコンパイラに共通しています。

  • 大文字から小文字への変換

    C言語以外では、コンパイラによって、大文字の関数やサブプログラム名が小文字に変換されます。これが、No such user existsエラー・メッセージの原因になる可能性があります。このエラー・メッセージが表示された場合は、オプション・ファイル内の関数またはサブプログラム名の大/小文字が、IAPXTB表の文字と一致しているかどうかを確認してください。

  • ベンダー提供のデバッガ・プログラム

    プリコンパイラとベンダー提供のデバッガに互換性がない場合があります。デバッガを使用して動作したプログラムが、デバッガを使用しないときも同様に動作するとはかぎりません。

  • IRECLENおよびORECLENの各パラメータの値

    IRECLENおよびORECLENの各パラメータには、最大値がありません。

6.1.5 静的および動的リンク

Oracleライブラリは、プリコンパイラやOCIまたはOCCIアプリケーションと静的または動的にリンクできます。静的リンクの場合、アプリケーション全体のライブラリおよびオブジェクトは、1つの実行可能プログラムにリンクされます。その結果、アプリケーションの実行可能ファイルが非常に大きくなることがあります。

動的リンクの場合、実行コードの一部分が実行可能プログラムに格納され、残りの部分はアプリケーションの実行時に動的にリンクされるライブラリに格納されます。実行時にリンクされるライブラリを、動的ライブラリまたは共有ライブラリと呼びます。動的リンクには、次のようないくつかのメリットがあります。

  • ディスク領域要件が少なくなります。複数のアプリケーションで、または同一アプリケーションのコールで、同じ動的ライブラリを使用できます。

  • メイン・メモリー要件が少なくなります。同一の動的ライブラリ・イメージをメイン・メモリーに一度ロードしておくと、複数のアプリケーションでそれを共有できます。

6.1.6 クライアント共有ライブラリとクライアント静的ライブラリ

クライアント共有ライブラリとクライアント静的ライブラリは、$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ビットのアプリケーションがどちらもサポートされている場合、実行するアプリケーションに応じて、正しいディレクトリを指定してください。

プラットフォーム 環境変数 サンプル設定
AIX(32ビット・アプリケーション) LIBPATH $ORACLE_HOME/lib
AIX(64ビット・アプリケーション) LIBPATH $ORACLE_HOME/lib
HP-UX(32ビット・アプリケーション) SHLIB_PATH $ORACLE_HOME/lib
HP-UX(64ビット・アプリケーション)およびLinux LD_LIBRARY_PATH $ORACLE_HOME/lib
Solaris(32ビット・アプリケーション) LD_LIBRARY_PATH $ORACLE_HOME/lib
Solaris(64ビット・アプリケーション) LD_LIBRARY_PATH $ORACLE_HOME/lib
IBM: Linux on System z (32ビット・アプリケーション) LD_LIBRARY_PATH $ORACLE_HOME/lib
IBM: Linux on System z (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.2 クライアント・アプリケーションのビット長サポート

次の表に、クライアント・アプリケーションについてサポートされるビット長(31ビット、32ビットまたは64ビット)を示します。


注意:

Oracle Database 11g リリース2 (11.2)からは、32ビット・プリコンパイラ、32ビット・クライアント実行可能ファイルおよびライブラリは、64ビットのOracle Databaseインストールで使用できません。これらは、Oracle Database Clientインストールの一部としてインストールされます。

クライアント・アプリケーションのタイプ サポートされるプラットフォーム
32ビットのみ Linux x86
32ビットおよび64ビット AIX、HP-UX PA-RISC、Linux x86-64、SPARC、HP-UX Itanium、Solaris x86-64およびIBM: Linux on System z

次の表に、32ビットおよび64ビットのクライアント共有ライブラリを示します。


注意:

Oracle Database 11g リリース2 (11.2)からは、32ビットおよび64ビットのOracle Database Clientは別のOracleホームにインストールされます。

プラットフォーム 32ビット(または31ビット)のクライアント共有ライブラリ 64ビットのクライアント共有ライブラリ
AIX
$ORACLE_HOME/lib/libclntsh.a
$ORACLE_HOME/lib/libclntsh.so
$ORACLE_HOME/lib/libclntsh.a
$ORACLE_HOME/lib/libclntsh.so
HP-UX PA-RISC

HP-UX Itanium

$ORACLE_HOME/lib/libclntsh.sl
$ORACLE_HOME/lib/libclntsh.sl
Linux x86-64、Solaris、Solaris x86-64およびIBM: Linux on System z
$ORACLE_HOME/lib/libclntsh.so
$ORACLE_HOME/lib/libclntsh.so

異なるワード・サイズが混在しているインストールを実装するには、次の手順を実行します。

  1. 次のコマンドを実行して、32ビットおよび64ビットのクライアント共有ライブラリを作成します。

    $ $ORACLE_HOME/bin/genclntsh
    
  2. プラットフォームに応じて、次のいずれかの環境変数に、必要な32ビットおよび64ビットのクライアント共有ライブラリのパスを入力します。

    プラットフォーム 環境変数
    AIX LIBPATH
    HP-UX(32ビット・クライアント・アプリケーション) SHLIB_PATH
    HP-UX、Linux x86、Linux x86-64、SolarisおよびIBM: Linux on System z LD_LIBRARY_PATH

32ビットのPro*CおよびOCIカスタマ・アプリケーションの作成

Pro*CおよびOracle Call Interface(OCI)カスタマ・アプリケーションをサポートするオペレーティング・システムでは、次のファイルにPro*CおよびOCIアプリケーションの作成方法が記載されています。

作成内容 . . 参照先のMakeファイル . .
Pro*Cアプリケーションの作成 $ORACLE_HOME/precomp/demo/proc/demo_proc.mk
OCIアプリケーションの作成 $ORACLE_HOME/rdbms/demo/demo_rdbms.mk

6.3 Pro*C/C++プリコンパイラ

Pro*C/C++プリコンパイラを使用する場合は、事前にオペレーティング・システムの適切なバージョンのコンパイラが正しくインストールされていることを確認してください。


関連項目:

  • サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください

  • Pro*C/C++プリコンパイラおよびインタフェース機能の詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。


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

6.3.1 Pro*C/C++のデモ・プログラム

デモ・プログラムは、Pro*C/C++プリコンパイラの機能を紹介するために用意されています。デモ・プログラムには、C、C++およびObjectプログラムの3種類があります。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/procディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。


注意:

デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$ORACLE_HOME/precomp/demo/proc/ディレクトリにあるMakeファイルdemo_proc.mkを使用します。たとえば、sample1のデモ・プログラムをプリコンパイル、コンパイルおよびリンクするには、次のコマンドを実行します。


注意:

AIXシステムの場合、デモ・プログラムを正しくコンパイルするために、次の例のmakeコマンドの-rオプションを指定してください。次に例を示します。
$ make -r -f 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

6.3.2 Pro*C/C++のユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/proc/demo_proc.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_proc32.mkを使用して、32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*C/C++により32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム 64ビットMakeファイル 32ビットMakeファイル
AIX、HP-UX、Linux x86-64、Solaris x86-64およびSolaris demo_proc.mk demo_proc32.mk
Linux x86 該当なし demo_proc.mk


関連項目:

ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。


注意:

AIXシステムの場合、プログラムを正しくコンパイルするために、次の例のmakeコマンドの-rオプションを指定してください。

Makeファイルdemo_proc.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_proc.mk target OBJS="objfile1 objfile2 ..." EXE=exename

各項目の意味は次のとおりです。

  • targetは、使用するMakeファイルのターゲットです。

  • objfilenは、プログラムをリンクするためのオブジェクト・ファイルです。

  • exenameは、実行可能プログラムです。

たとえば、Pro*C/C++ソース・ファイルmyprog.pcからプログラムmyprogを作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。

  • Cソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_proc.mk build OBJS=myprog.o EXE=myprog
    
  • Cソースの場合、クライアント共有ライブラリに静的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_proc.mk build_static OBJS=myprog.o EXE=myprog
    
  • C++ソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_proc.mk cppbuild OBJS=myprog.o EXE=myprog
    
  • C++ソースの場合、クライアント共有ライブラリに静的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_proc.mk cppbuild_static OBJS=myprog.o EXE=myprog
    

6.4 Pro*COBOLプリコンパイラ

表6-4に、Pro*COBOLプリコンパイラのネーミング規則を示します。

表6-4 Pro*COBOLネーミング規則

項目 ネーミング規則

実行可能ファイル

procob

デモンストレーション・ディレクトリ

procob2

Makeファイル

demo_procob.mkまたはdemo_procob_32.mk


Pro*COBOLでは、静的リンク、動的リンクまたは動的読取りプログラムをサポートしています。動的リンク・プログラムは、クライアント共有ライブラリを使用します。動的読取りプログラムは、$ORACLE_HOME/binディレクトリにあるrtsora実行可能ファイルを使用します。

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

6.4.1 Pro*COBOLの環境変数

この項では、Pro*COBOLで必要な環境変数について説明します。

6.4.1.1 Micro Focus Server Express COBOLコンパイラ

Micro Focus Server Express COBOLコンパイラを使用するには、環境変数COBDIRPATHおよび共有ライブラリ・パス環境変数を設定する必要があります。


関連項目:

共有ライブラリのパス環境変数の詳細は、「クライアント共有ライブラリとクライアント静的ライブラリ」を参照してください。

COBDIR

環境変数COBDIRには、コンパイラがインストールされているディレクトリを設定します。たとえば、コンパイラが/opt/lib/cobolディレクトリにインストールされている場合は、次のコマンドを実行します。

  • Bourne、BashまたはKornシェルの場合

    $ COBDIR=/opt/lib/cobol
    $ export COBDIR
    
  • Cシェルの場合

    % setenv COBDIR /opt/lib/cobol
    

PATH

$COBDIR/binディレクトリを含むように環境変数PATHを設定します。

  • Bourne、BashまたはKornシェルの場合

    $ PATH=$COBDIR/bin:$PATH
    $ export PATH
    
  • Cシェルの場合

    % setenv PATH ${COBDIR}/bin:${PATH}
    

共有ライブラリ・パス

環境変数LIBPATHLD_LIBRARY_PATHまたはSHLIB_PATHには、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、プラットフォームで環境変数LD_LIBRARY_PATHが使用されており、コンパイラ・ライブラリが$COBDIR/coblibディレクトリにインストールされている場合は、次のコマンドを実行します。

  • Bourne、BashまたはKornシェルの場合

    $ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$COBDIR/coblib
    $ export LD_LIBRARY_PATH
    
  • Cシェルの場合

    % setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:$COBDIR/coblib
    

6.4.1.2 Acucorp ACUCOBOL-GT COBOLコンパイラ

Acucorp ACUCOBOL-GT COBOLコンパイラを使用するには、A_TERMCAPA_TERMPATHおよび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_TERM

a_termcapファイルの場所を指定するには環境変数A_TERMCAPを設定し、そのファイルからサポートされる端末を指定するには環境変数A_TERMを設定します。次に例を示します。

  • Bourne、BashまたはKornシェルの場合

    $ A_TERMCAP=/opt/COBOL/etc/a_termcap
    $ A_TERM=vt100
    $ export A_TERMCAP A_TERM
    
  • Cシェルの場合

    % setenv A_TERMCAP /opt/COBOL/etc/a_termcap
    % setenv A_TERM vt100
    

PATH

/opt/COBOL/binディレクトリを含むように環境変数PATHを設定します。

  • Bourne、BashまたはKornシェルの場合

    $ PATH=/opt/COBOL/bin:$PATH
    $ export PATH
    
  • Cシェルの場合

    % setenv PATH opt/COBOL/bin:${PATH}
    

LD_LIBRARY_PATH


注意:

AIXの場合、LIBPATH変数は、LD_LIBRARY_PATH変数と同等です。AIXでは、次のコマンドでLD_LIBRARY_PATH変数ではなくLIBPATH変数を使用する必要があります。

環境変数LD_LIBRARY_PATHには、コンパイラ・ライブラリがインストールされているディレクトリを設定します。たとえば、コンパイラ・ライブラリが/opt/COBOL/libディレクトリにインストールされている場合は、次のコマンドを実行します。

  • Bourne、BashまたはKornシェルの場合

    $ LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/opt/COBOL/lib
    $ export LD_LIBRARY_PATH
    
  • Cシェルの場合

    % setenv LD_LIBRARY_PATH ${LD_LIBRARY_PATH}:/opt/COBOL/lib
    

6.4.2 Pro*COBOLのOracleランタイム・システム

Oracleには、動的読取りPro*COBOLプログラムを実行するために、rtsoraという専用のランタイム・システムが用意されています。動的読取りPro*COBOLプログラムを実行するには、cobrunランタイム・システムのかわりに、rtsoraランタイム・システムを使用します。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

6.4.3 Pro*COBOLのデモ・プログラム

デモ・プログラムは、Pro*COBOLプリコンパイラの機能を紹介するために用意されています。デモ・プログラムは、$ORACLE_HOME/precomp/demo/procob2ディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。


注意:

デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

次の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

6.4.4 Pro*COBOLのユーザー・プログラム

Makeファイル$ORACLE_HOME/precomp/demo/procob2/demo_procob.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。Makeファイルdemo_procob.mkを使用して、32ビット(または31ビット)のユーザー・プログラムを作成することもできます。次の表に、Pro*COBOLにより32ビット(または31ビット)および64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム Makeファイル
AIX、HP-UX、Linux x86-64、Solaris、IBM: Linux on System zおよびLinux x86 demo_procob.mk


関連項目:

ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

Makeファイルdemo_procob.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_procob.mk target COBS="cobfile1 cobfile2 ..." EXE=exename

各項目の意味は次のとおりです。

  • targetは、使用するMakeファイルのターゲットです。

  • cobfilenは、プログラムのCOBOLソース・ファイルです。

  • exenameは、実行可能プログラムです。

たとえば、プログラムmyprogを作成する場合は、作成する実行可能ファイルのソースとタイプに応じて、次のいずれかのコマンドを実行します。

  • COBOLソースの場合、クライアント共有ライブラリに動的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_procob.mk build COBS=myprog.cob EXE=myprog
    
  • COBOLソースの場合、静的にリンクさせるには、次のコマンドを実行します。

    $ make -f demo_procob.mk build_static COBS=myprog.cob EXE=myprog
    
  • COBOLソースの場合、rtsoraで使用するための動的読取りプログラムを作成するには、次のコマンドを実行します。

    $ make -f demo_procob.mk myprog.gnt
    

6.4.5 FORMATプリコンパイラ・オプション

FORMATプリコンパイラ・オプションは、COBOLの入力行の形式を指定します。デフォルト値のANSIを指定した場合、列1から6はオプションの順序番号、列7はコメントまたは継続行を示します。段落名は列8から11で開始され、列12から72が文となります。

TERMINALを指定した場合、列1から6は削除され、列7が左端の列になります。

6.5 Pro*FORTRANプリコンパイラ

Pro*FORTRANプリコンパイラを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。この項では、次の項目について説明します。


関連項目:

  • サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

  • Pro*FORTRANプリコンパイラおよびインタフェース機能の詳細は、『Pro*FORTRAN Supplement to the Oracle Precompilers Guide』を参照してください。


6.5.1 Pro*FORTRANのデモ・プログラム

デモ・プログラムは、Pro*FORTRANプリコンパイラの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/proforディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。


注意:

デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$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

6.5.2 Pro*FORTRANのユーザー・プログラム

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 demo_profor.mk demo_profor_32.mk


関連項目:

ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

Makeファイルdemo_proc.mkを使用してプログラムを作成する場合は、次のようなコマンドを実行します。

$ make -f demo_profor.mk target FORS="forfile1 forfile2 ..." EXE=exename

各項目の意味は次のとおりです。

  • targetは、使用するMakeファイルのターゲットです。

  • forfilenは、プログラムのFORTRANソース・ファイルです。

  • 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
    

6.6 SQL*Module for ADA


注意:

この項の内容は、AIXプラットフォームに適用されます。

SQL*Module for Adaを使用する場合は、事前に適切なバージョンのコンパイラがインストールされていることを確認してください。


関連項目:

  • 必要なコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

  • SQL*Module for Adaの詳細は、『Oracle SQL*Module for Ada Programmer's Guide』を参照してください。


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

6.6.1 SQL*Module for Adaデモ・プログラム

デモ・プログラムは、SQL*Module for Adaの機能を紹介するために用意されています。デモ・プログラムはすべて、$ORACLE_HOME/precomp/demo/modadaディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

ch1_drvデモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。


注意:

デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

demcalspおよびdemohostの各デモ・プログラムでは、サンプルのcollegeデータベースがMODTESTスキーマに存在している必要があります。適切なmakeコマンドを使用してMODTESTスキーマを作成すると、サンプルのcollegeデータベースをロードできます。

SQL*Module for Adaデモ・プログラムを作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、サンプルのcollegeデータベースを作成するには、次のコマンドを実行します。

$ make -f demo_modada.mk all RUNSQL=run

1つのデモ・プログラム(demohost)を作成して、MODTESTユーザーの作成に必要なSQLスクリプトを実行し、サンプルのcollegeデータベースを作成するには、次のコマンドを実行します。

$ make -f demo_modada.mk makeuser loaddb demohost RUNSQL=run

SQL*Module for Adaデモ・プログラムを作成して、サンプルのcollegeデータベースを再び作成しない場合には、次のコマンドを実行します。

$ make -f demo_modada.mk samples

1つのデモ・プログラム(demohost)を作成して、サンプルのcollegeデータベースを再び作成しない場合は、次のコマンドを実行します。

$ make -f demo_modada.mk demohost

プログラムを実行するには、Oracle Netの接続文字列を定義するか、または適切な表が存在するデータベースへの接続に使用するINST1_ALIASという別名を定義する必要があります。

6.6.2 SQL*Module for Adaユーザー・プログラム

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に渡されるコマンドライン引数です。


    関連項目:

    SQL*Module for Adaの詳細は、『Oracle SQL*Module for Ada Programmer's Guide』を参照してください。

6.7 OCIとOCCI

Oracle Call Interface(OCI)またはOracle C++ Call Interface(OCCI)を使用する前に、適切なバージョンのCまたはC++がインストール済であることを確認してください。


関連項目:

  • サポートされるコンパイラのバージョンの詳細は、『Oracle Databaseインストレーション・ガイド』を参照してください。

  • OCIおよびOCCIについては、Oracle Call Interfaceのプログラマーズ・ガイドまたはOracle C++ Call Interfaceのプログラマーズ・ガイドを参照してください。


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

6.7.1 OCIとOCCIのデモ・プログラム

OCIとOCCIの機能を紹介するデモ・プログラムは、ソフトウェアのOracle Database 11g Examplesメディアに収録されています。デモ・プログラムには、CおよびC++プログラムの2種類があります。デモ・プログラムは、$ORACLE_HOME/rdbms/demoディレクトリにあります。デフォルトでは、すべてのプログラムがクライアント共有ライブラリに動的にリンクされます。

デモ・プログラムを実行するには、$ORACLE_HOME/sqlplus/demo/demobld.sqlスクリプトで作成したデモンストレーション表がパスワード付きのJONESスキーマに存在する必要があります。一部のデモ・プログラムでは、デモ・ソース・ファイルに示されているように、特定の.sqlファイルを実行することが必要です。OCCIデモ・プログラムでは、occidemo.sqlを実行することが必要です。


注意:

デモンストレーションを作成する前に、JONESアカウントのロックを解除してパスワードを設定する必要があります。

デモ・プログラムを作成するには、$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

6.7.2 OCIとOCCIのユーザー・プログラム

Makeファイル$ORACLE_HOME/rdbms/demo/demo_rdbms.mkを使用して、ユーザー・プログラムを作成できます。このMakeファイルは、32ビットまたは64ビットのユーザー・プログラムを作成します。demo_rdbms32.mkを使用して、64ビットのオペレーティング・システムに32ビットのユーザー・プログラムを作成することもできます。次の表に、Pro*FORTRANにより32ビットおよび64ビットのユーザー・プログラムを作成するためのMakeファイルを示します。

プラットフォーム 64ビットMakeファイル 32ビットMakeファイル
AIX、HP-UX、SolarisおよびLinux x86-64 demo_rdbms.mk demo_rdbms32.mk
Linux x86 該当なし demo_rdbms.mk


関連項目:

ユーザー・プログラムの作成方法は、そのMakeファイルを参照してください。

6.8 64ビット・ドライバを使用するOracle JDBC/OCIプログラム


注意:

  • この項の内容は、AIX、HP-UX、Linux x86-64およびSolarisのプラットフォームに適用されます。

  • この項で説明する指示とMakeファイルを使用して、64ビット・ドライバを使用するJDBC/OCIユーザー・プログラムを作成できます。


64ビット・ドライバを使用するJDBC/OCIデモ・プログラムを実行するには、次の手順を実行します。

  1. 次の各ファイルについて、環境変数CLASSPATHの先頭に$ORACLE_HOME/jdbc/lib/ojdbc5.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
    
  2. $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
    
  3. $ORACLE_HOME/libディレクトリを含むように、環境変数LD_LIBRARY_PATH_64を設定します。


    注意:

    AIXの場合、LIBPATH変数は、LD_LIBRARY_PATH_64変数と同等です。AIXでは、LD_LIBRARY_PATH_64変数ではなくLIBPATH変数を使用する必要があります。

6.9 カスタムMakeファイル

この章の製品別の項で説明したように、ユーザー・プログラムを作成する場合は、オラクル社がソフトウェアとともに提供するMakeファイルdemo_product.mkを使用してください。このMakeファイルを変更する場合、またはカスタムMakeファイルを使用する場合は、次の制限事項に注意してください。

  • Oracleライブラリの順番は変更しないでください。リンク中にすべてのシンボルが解決されるように、Oracleライブラリはリンク・ラインに2回以上追加されます。

    AIXを除き、Oracleライブラリの順番がすべてのプラットフォームで重要である理由は、次のとおりです。

    • Oracleライブラリは相互に参照し合います。たとえば、ライブラリAの関数はライブラリBの関数をコールし、ライブラリBの関数はライブラリAの関数をコールします。

    • HP-UXのリンカーは、1パス・リンカーです。AIX、LinuxおよびSolarisのリンカーは、2パス・リンカーです。

  • ライブラリをリンク・ラインの最初または最後に追加します。Oracleライブラリ間にユーザー・ライブラリを入れないでください。

  • nmakeまたはGNU makeなどのmakeユーティリティを使用する場合は、マクロおよび接頭辞の処理について、オペレーティング・システムで提供されているmakeユーティリティとの違いに注意してください。OracleのMakeファイルは、makeユーティリティによってテストおよびサポートされます。

  • Oracleライブラリの名前および内容は、リリース間で変更されることがあります。必要なライブラリを判断するには、現行のリリースで提供されているMakeファイルdemo_product.mkを必ず使用してください。

6.10 未定義シンボルの修正

オラクル社が提供しているsymfindユーティリティを使用すると、シンボルが定義されているライブラリまたはオブジェクト・ファイルの場所を確認する際に役立ちます。プログラムのリンク時に、未定義シンボルは一般的なエラーの1つとみなされ、次のようなエラー・メッセージが生成されます。

$ make -f demo_proc.mk sample1
Undefined                       first referenced
 symbol                             in file
sqlcex                              sample1.o
sqlglm                              sample1.o
ld: irrecoverable: 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/11.2.0/bin/symfind sqlcex
Local Directory: /u01/app/oracle/product/11.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

6.11 マルチスレッド・アプリケーション

このリリースで提供されているOracleライブラリはスレッド・セーフで、マルチスレッド・アプリケーションをサポートします。

6.12 シグナル・ハンドラの使用

Oracle Databaseでは、2タスク通信にいくつかのシグナルが使用されます。シグナルは、プロセスがデータベースに接続するとユーザー・プロセスにインストールされ、切断すると削除されます。

表6-5に、Oracle Databaseで2タスク通信に使用されるシグナルを示します。

表6-5 2タスク通信に使用されるシグナル

シグナル 説明

SIGCLD

Oracleプロセスが終了すると、パイプ・ドライバはSIGCLD(SIGCHLDともいいます)を使用します。SIGCLDシグナルは、オペレーティング・システム・カーネルによってユーザー・プロセスに送信されます。シグナル・ハンドラは、wait()ルーチンを使用して、サーバー・プロセスが異常終了しているかどうかを調べます。Oracleプロセスではなく、ユーザー・プロセスがSIGCLDを受け取ります。

SIGCONT

パイプ2タスク・ドライバが、バンド外ブレークをユーザー・プロセスからOracleプロセスに送信する場合に、SIGCONTを使用します。

SIGINT

2タスク・ドライバが、ユーザーの割込み要求を検出する場合に、SIGINTを使用します。Oracleプロセスではなく、ユーザー・プロセスがSIGINTを受け取ります。

SIGIO

Oracle Netプロトコルが、ネットワーク・イベントの着信を示す場合に、SIGIOを使用します。

SIGPIPE

パイプ・ドライバが、通信チャネルのファイルの終わりを検出する場合に、SIGPIPEを使用します。パイプへの書込み時に読取りプロセスが存在していない場合、SIGPIPEシグナルが書込みプロセスに送信されます。Oracleプロセスとユーザー・プロセスの両方が、SIGPIPEを受け取ります。SIGCLDは、SIGPIPEに似ていますが、ユーザー・プロセスのみに適用され、Oracleプロセスには適用されません。

SIGTERM

パイプ・ドライバが、ユーザー側からOracleプロセスに割込みシグナルを送る場合に、SIGTERMを使用します。ユーザーが割込みキー([Ctrl]+[C])を押すと、このシグナルが送信されます。ユーザー・プロセスではなく、OracleプロセスがSIGTERMを受け取ります。

SIGURG

Oracle Net TCP/IPドライバが、バンド外ブレークをユーザー・プロセスからOracleプロセスに送信する場合に、SIGURGを使用します。


表に記載されているシグナルは、すべてのプリコンパイラ・アプリケーションに影響します。Oracleプロセスへの接続時に、SIGCLD(またはSIGCHLD)およびSIGPIPEにシグナル・ハンドラを1つのみインストールできます。osnsui()ルーチンをコールして設定すると、複数のシグナル・ハンドラをSIGINT用にインストールできます。SIGINTの場合は、osnsui()およびosncui()を使用して、シグナル受取りルーチンを登録および削除します。

また、必要に応じて、他のシグナルにもシグナル・ハンドラをインストールできます。Oracleプロセスに接続していない場合は、複数のシグナル・ハンドラをインストールできます。

例6-1に、シグナル・ルーチンおよび受取りルーチンの設定方法を示します。

例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()ルーチンの使用方法を示します。

例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. */
                ...
        }
        ...
}

6.13 XA機能

Oracle XAは、X/Open Distributed Transaction Processing XAインタフェースのOracle実装です。XA標準には、トランザクション内の共有リソースへのアクセスを制御するリソース・マネージャ間や、トランザクションを監視および解決するトランザクション・サービス間の双方向インタフェースが規定されています。

Oracle Call Interfaceには、XA機能があります。TPモニターXAアプリケーションを作成するときは、TPモニター・ライブラリ(シンボルax_regおよびax_unregを定義するライブラリ)が、リンク・ラインでOracle Client共有ライブラリより前に設定されていることを確認してください。このリンク制限は、XAの動的登録(Oracle XAスイッチxaoswd)を使用する場合に必要です。

Oracle DatabaseのXAコールは、クライアント共有ライブラリ(プラットフォームに応じてlibclntsh.alibclntsh.sllibclntsh.soまたはlibclntsh.dylib)およびクライアント静的ライブラリ(libclntst11.a)の両方で定義されています。これらのライブラリは、$ORACLE_HOME/libディレクトリにあります。