アプリケーション構築の手引き

重要な考慮事項

この節では、サポートされている各種コンパイラーで DB2 アプリケーションを構築するための情報として、 AIX に固有の情報を提供します。 次のような内容を扱います。

IBM および Micro Focus COBOL の実行

AIX がストアード・プロシージャーをロードしたり、 その中にあるライブラリー参照を解決したりする方法のために、 COBOL をインストールする方法についての要件があります。 これらの要件は、 COBOL プログラムが実行時に共用ライブラリー (ストアード・プロシージャー) をロードするときの要素となります。

ストアード・プロシージャーをロードするときには、 それが参照する一連のライブラリーの連鎖もロードする必要があります。 プログラムで間接的にのみ参照するライブラリーを AIX が探索するときには、 言語プロバイダー (IBM COBOL または Micro Focus COBOL) の作成した参照ライブラリーにコンパイルされたパスを使用する必要があります。 このパスは必ずしも、コンパイラーがインストールされたパスと同じとは限りません。 連鎖に含まれるライブラリーをバインドできない場合、 ストアード・プロシージャーのロードは失敗し、SQLCODE -10013 を受け取ります。

これが生じないようにするには、必要なときには常にコンパイラーをインストールし、 その後、すべての言語ライブラリーの記号リンクを、 インストール・ディレクトリーから /usr/lib (ライブラリーのロードが必要なときには、ほぼ必ず探索されるディレクトリー) に作成します。 ライブラリーを sqllib/function (ストアード・プロシージャーのディレクトリー) にリンクできますが、 これは、1 つのデータベース・インスタンスに対してしか作動しません。 /usr/lib は、マシン上のすべてのデータベース・インスタンスに対して作動します。 ライブラリーをコピーしないことを強くお勧めします。 (特に、ライブラリーの複数のコピーが存在するときの Micro Focus COBOL の場合。)

Micro Focus COBOL のサンプルの記号リンクを下記に示します (/usr/lpp/cobdirにインストールされていると仮定する)。

    [1]> su root
    [2]> cd /usr/lib
    [1]> ln -sf /usr/lpp/cobdir/coblib/*.a .

ストアード・プロシージャーおよび UDF 用の入り口点

ストアード・プロシージャーは、データベースにアクセスし、 クライアント・アプリケーションに情報を戻すプログラムです。 ユーザー定義関数 (UDF) は、ユーザー独自のスカラー関数または表関数です。 ストアード・プロシージャーおよび UDF は、サーバー上でコンパイルされ、 サーバー上の共用ライブラリーに保管されて実行されます。 これらの共用ライブラリーは、 ストアード・プロシージャーおよび UDF をコンパイルするときに作成されます。

共用ライブラリーには入り口点が 1 つずつあります。 入り口点は、サーバーから呼び出され、 共用ライブラリー内のプロシージャーにアクセスします。 AIX 上の IBM C コンパイラーでは、 ライブラリー内のエクスポートされた関数名を、 デフォルトの入り口点として指定することができます。 これは、ストアード・プロシージャーの呼び出しまたは CREATE FUNCTION ステートメントで、 ライブラリー名だけを指定した場合に呼び出される関数です。 これを行うには、リンク・ステップで -e オプションを指定します。 たとえば、次のようにします。

   -e funcname

これは、funcname をデフォルトの入り口点とします。 CREATE FUNCTION ステートメントとの関連については、 "UDF および CREATE FUNCTION ステートメント"を参照してください。

他の UNIX プラットフォームでは、そのような機構は存在しないので、 DB2 はデフォルトの入り口点がライブラリーと同じ名前であるとみなします。

AIX では、外部から呼び出し可能な、 ライブラリー内のグローバル関数を指定するエクスポート・ファイルを提供することが必要です。 このファイルは、 ライブラリー内のすべてのストアード・プロシージャーまたはユーザー定義関数 (あるいはその両方) の名前を含んでいる必要があります。 他の UNIX プラットフォームは単に、 ライブラリー内のすべてのグローバル関数をエクスポートするだけです。 次は、AIX エクスポート・ファイルの例です。



   #! outsrv export file
   outsrv

エクスポート・ファイルの outsrv.exp は、 ストアード・プロシージャー outsrv をリストします。 リンカーは outsrv.exp を使用して、 同じ名前のストアード・プロシージャーを含む共用ライブラリー outsrv を作成します。
注:共用ライブラリーを作成した後、一般に、 DB2 がそれにアクセスするディレクトリーにコピーします。 ストアード・プロシージャーまたはユーザー定義関数の共用ライブラリーを置換するには、 /usr/sbin/slibclean を実行して AIX 共用ライブラリーのキャッシュをフラッシュするか、 またはライブラリーを宛先ディレクトリーから除去した後、 ソース・ディレクトリーから宛先ディレクトリーにライブラリーをコピーする必要があります。 そうしなければ、参照されるライブラリーのキャッシュを AIX が保持し、 ライブラリーの重ね書きを認めないため、コピー操作が失敗します。

AIX コンパイラーの資料には、 エクスポート・ファイルに関する追加情報が記載されています。

ストアード・プロシージャーおよび CALL ステートメント

アプリケーション開発の手引き は、 ストアード・プロシージャーのコーディング方法を説明しています。 SQL 解説書 は、 CALL ステートメントを使用するデータベースのロケーションでストアード・プロシージャーを呼び出す方法を説明しています。 この節では、 ストアード・プロシージャーをコンパイルおよびリンクする方法と、 CALL ステートメントで提供する情報について説明します。

プログラムをコンパイルしリンクするときには、 次の 2 つの方法で関数を識別することができます。

UDF および CREATE FUNCTION ステートメント

アプリケーション開発の手引き は、UDF のコーディング方法を説明します。 SQL 解説書 は、 CREATE FUNCTION ステートメントを使って UDF を DB2 に登録する方法を説明しています。 この節は、UDF をコンパイルし、リンクする方法と、 CREATE FUNCTION ステートメントの EXTERNAL NAME 文節中で提供されている情報との間に見られる関係を説明します。

プログラムをコンパイルしリンクするときには、 次の 2 つの方法で関数を識別することができます。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]