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

ptx/C++

この節では、以下のトピックを取り上げています。

DB2 API と組み込み SQL アプリケーション

sqllib/samples/cpp のビルド・ファイル bldapp には、 DB2 API と組み込み SQL プログラムを構築するコマンドが含まれています。

第 1 パラメーター $1 には、ソース・ファイルの名前を指定します。 必要なパラメーターはこのパラメーターだけであり、 組み込み SQL を含まない DB2 API プログラムに必要な唯一のパラメーターです。 組み込み SQL プログラムを作成するためにはデータベースへの接続が必要なため、 3 つのパラメーターがオプションとして用意されています。 2 番目のパラメーターは $2 で、 接続するデータベースの名前を指定します。 3 番目のパラメーターは $3 で、 データベースのユーザー ID を指定します。 そしてもう 1 つが $4 で、 データベースのパスワードを指定します。

組み込み SQL プログラムの場合、bldapp は、 プリコンパイルおよびバインドのファイル embprep にパラメーターを渡します。 データベース名が指定されない場合は、 デフォルトの sample データベースが使用されます。 なお、ユーザー ID とパスワードのパラメーターは、 プログラムを構築するインスタンスとデータベースのあるインスタンスが異なる場合にのみ必要になります。



#! /bin/ksh
# bldapp script file -- DYNIX/ptx
# Builds a C++ application program
# Usage:  bldapp <prog_name> [ <db_name> [ <userid> <password> ]]
  
# Set DB2PATH to the location where DB2 will be accessed.
# The default is the standard instance path.
DB2PATH=$HOME/sqllib
# if an embedded SQL program, precompile and bind it.
if [[ -f $1".sqC" ]]
then
  embprep $1 $2 $3 $4
  # Compile the utilemb.C error-checking utility.
  c++ -I$DB2PATH/include -D_RWSTD_COMPILE_INSTANTIATE=0 -c utilemb.C
else
  # Compile the utilapi.C error-checking utility.
  c++ -I$DB2PATH/include -D_RWSTD_COMPILE_INSTANTIATE=0 -c utilapi.C
fi
 
# Compile the program.
c++ -I$DB2PATH/include -D_RWSTD_COMPILE_INSTANTIATE=0 -c $1.C
if [[ -f $1".sqC" ]]
then
  # Link the program with utilemb.o
  c++ -o $1 $1.o utilemb.o -L$DB2PATH/lib -ldb2 -lseq
else
  # Link the program with utilapi.o
  c++ -o $1 $1.o utilapi.o -L$DB2PATH/lib -ldb2 -lseq
fi


bldapp のコンパイルおよびリンク・オプション

コンパイル・オプション

c++
C++ コンパイラー。

-I$DB2PATH/include
DB2 インクルード・ファイルのロケーションを指定します。 たとえば、$HOME/sqllib/include

-D_RWSTD_COMPILE_INSTANTIATE=0
Rogue Wave のクラスをインスタンス化しません。

-c
コンパイルのみを実行し、リンクは実行しません。 コンパイルとリンクは別個のステップです。

リンク・オプション

c++
コンパイラーをリンカーのフロントエンドとして使用します。

-o $1
実行可能ファイルを指定します。

$1.o
プログラムのオブジェクト・ファイルを組み込みます。

utilemb.o
組み込み SQL プログラムの場合に、 エラー・チェックを行う組み込み SQL ユーティリティー・オブジェクト・ファイルを含みます。

utilapi.o
非組み込み SQL プログラムの場合に、 エラー・チェックを行う DB2 API ユーティリティー・オブジェクト・ファイルを含みます。

-L$DB2PATH/lib
リンク時の DB2 静的ライブラリーおよび共用ライブラリーのロケーションを指定します。 たとえば、$HOME/sqllib/lib-L オプションを指定しないと、 コンパイラーはパスとして /usr/lib:/lib を想定します。

-ldb2
DB2 ライブラリーとリンクします。

-lseq
Sequent ライブラリーとリンクします。

他のコンパイラー・オプションについては、コンパイラーの資料をご覧ください。

ソース・ファイル client.C から DB2 API 非組み込み SQL サンプル・プログラム client を構築するには、 次のようにします。

   bldapp client

結果として、実行可能ファイル client が作成されます。

この実行可能ファイルを実行するには、ファイル名を入力します。

   client

組み込み SQL アプリケーションの構築および実行

ソース・ファイル updat.sqC から組み込み SQL アプリケーション updat を構築する場合、 次の 3 つの方法があります。

  1. 同じインスタンスにあるサンプル・データベースに接続している場合は、 次のように入力します。
       bldapp updat
    
  2. 同じインスタンスにある他のデータベースに接続している場合は、 さらにデータベース名を加えます。
       bldapp updat database
    
  3. 他のインスタンスにあるデータベースに接続している場合は、 さらにそのデータベース・インスタンスのユーザー ID とパスワードを加えます。
       bldapp updat database userid password
    

結果として、実行可能ファイル updat が作成されます。

この組み込み SQL アプリケーションを実行する方法には次の 3 つがあります。

  1. 同じインスタンスにある sample データベースにアクセスする場合は、 ただ実行可能ファイルの名前を入力します。
    updat
    
  2. 同じインスタンスにある他のデータベースにアクセスする場合は、 実行可能ファイル名とデータベース名を入力します。
    updat database
    
  3. 他のインスタンスにあるデータベースにアクセスする場合は、 実行可能ファイル名、データベース名、 およびそのデータベース・インスタンスのユーザー ID とパスワードを入力します。
    updat database userid password
    

組み込み SQL ストアード・プロシージャー

注:"UDF およびストアード・プロシージャーに関する C++ 考慮事項"にある、 C++ のストアード・プロシージャーの構築に関する情報を参照してください。

sqllib/samples/cpp にあるスクリプト・ファイル bldsrv には、 組み込み SQL ストアード・プロシージャーを作成するためのコマンドが含まれています。 スクリプト・ファイルは、 ストアード・プロシージャーを共用ライブラリーの中にコンパイルしますが、 それはクライアント・アプリケーションから呼び出すことができます。

第 1 パラメーター $1 には、ソース・ファイルの名前を指定します。 必須パラメーターはこのパラメーターだけです。 ただし、組み込み SQL プログラムの構築にはデータベースへの接続が必要なので、 付加的なオプションとして、接続先のデータベース名を指定するパラメーター $2 が用意されています。 データベース名が指定されない場合は、 デフォルトの sample データベースが使用されます。 ストアード・プロシージャーは、 必ずデータベースが常駐するインスタンスに構築される必要があるため、 ユーザー ID やパスワードを入力するための付加的なパラメーターは必要ありません。 スクリプト・ファイル bldsrv は、 プリコンパイルおよびバインドのファイル embprep にパラメーターを渡します。

共用ライブラリーの名前には、ソース・ファイル名 $1 が使用されます。

#! /bin/ksh
# bldsrv script file -- DYNIX/ptx
# Builds a C++ stored procedure
# Usage: bldsrv <prog_name> [ <db_name> ]
 
# Set DB2PATH to where DB2 will be accessed.
# The default is the standard instance path.
DB2PATH=$HOME/sqllib
# Precompile and bind the program.
embprep $1 $2
 
# Compile the program. First ensure it is coded with extern "C".
c++ -KPIC -I$DB2PATH/include -D_RWSTD_COMPILE_INSTANTIATE=0 -c $1.C
# Link the program and create a shared library.
c++ -G -o $1 $1.o -L$DB2PATH/lib -ldb2
  
# Copy the shared library to the sqllib/function subdirectory.
# Note: the user must have write permission to this directory.
rm -f $DB2PATH/function/$1
cp $1.so $DB2PATH/function/$1


bldsrv のコンパイルおよびリンク・オプション

コンパイル・オプション

c++
C++ コンパイラー。

-KPIC
共用ライブラリー用の位置独立コードを生成します。

-I$DB2PATH/include
DB2 インクルード・ファイルのロケーションを指定します。 たとえば、-I$DB2PATH/include

-D_RWSTD_COMPILE_INSTANTIATE=0
Rogue Wave のクラスをインスタンス化しません。

-c
コンパイルのみを実行し、リンクは実行しません。 本書では、コンパイルとリンクが別個のステップであることを前提としています。

リンク・オプション

c++
コンパイラーをリンカーのフロントエンドとして使用します。

-G
共用ライブラリーを生成します。

-o $1
実行可能ファイルを指定します。

$1.o
プログラムのオブジェクト・ファイルを組み込みます。

-L$DB2PATH/lib
リンク時の DB2 静的ライブラリーおよび共用ライブラリーのロケーションを指定します。 たとえば、$HOME/sqllib/lib-L オプションを指定しないと、 コンパイラーはパスとして /usr/lib:/lib を想定します。

-ldb2
DB2 ライブラリーとリンクします。

他のコンパイラー・オプションについては、コンパイラーの資料をご覧ください。

sample データベースに接続している場合に、 ソース・ファイル spserver.sqC からサンプル・プログラム spserver を構築するには、 次のように入力します。

    bldsrv spserver

他のデータベースに接続しているときは、 さらにデータベース名も入力します。

    bldsrv spserver database

スクリプト・ファイルは、 共用ライブラリーをサーバー上の sqllib/function というパスにコピーします。

次に、サーバー上で spcreate.db2 スクリプトを実行して、 ストアード・プロシージャーをカタログ化します。 まず、データベースに接続します。

   db2 connect to sample

ストアード・プロシージャーがすでにカタログ化されている場合は、 次のコマンドを使用してそれらをドロップすることができます。

   db2 -td@ -vf spdrop.db2

その後、次のコマンドでストアード・プロシージャーをカタログ化します。

   db2 -td@ -vf spcreate.db2

カタログ化が終了したら、データベースを 1 度停止してから再始動し、 新しい共用ライブラリーが認識されるようにします。 必要であれば、共用ライブラリーにファイル・モードを設定して、 DB2 インスタンスからアクセスできるようにします。

共用ライブラリー spserver を作成したなら、 クライアント・アプリケーション spclient を構築することができます。 これは、共用ライブラリー内のストアード・プロシージャーを呼び出すアプリケーションです。

spclient は、 スクリプト・ファイル bldapp を使用して構築することができます。 詳細については、 "DB2 API と組み込み SQL アプリケーション"を参照してください。

共用ライブラリーにアクセスするには、 次のように入力してサンプル・クライアント・アプリケーションを実行します。

spclient database userid password

ここで、それぞれは次のものを表します。

database
接続先のデータベースの名前です。 名前は、sample かその別名、またはその他のデータベース名にすることができます。

userid
有効なユーザー ID です。

password
有効なパスワードです。

クライアント・アプリケーションは共用ライブラリー spserver にアクセスし、 様々なストアード・プロシージャー関数をサーバー・データベース上で実行します。 ストアード・プロシージャーは、出力をクライアント・アプリケーションに戻します。

ユーザー定義関数 (UDF)

注:"UDF およびストアード・プロシージャーに関する C++ 考慮事項"にある、 C++ UDF の構築に関する情報を参照してください。

sqllib/samples/cpp のスクリプト・ファイル bldudf には、 UDF を作成するためのコマンドが含まれています。 UDF には組み込み SQL ステートメントは含まれていません。 したがって、UDF プログラムを作成する際に、データベースに接続したり、 プログラムをプリコンパイルおよびバインドする必要はありません。

パラメーター $1 には、ソース・ファイルの名前を指定します。 スクリプト・ファイルは、そのソース・ファイル名を共用ライブラリー名として使います。



#! /bin/ksh
# bldudf script file -- DYNIX/ptx
# Builds a C++ user-defined function library
# Usage: bldudf <prog_name>
  
# Set DB2PATH to where DB2 will be accessed.
# The default is the standard instance path.
DB2PATH=$HOME/sqllib
 
# Compile the program.
c++ -KPIC -I$DB2PATH/include  -D_RWSTD_COMPILE_INSTANTIATE=0 -c $1.c
  
# Link the program and create a shared library.
c++ -G -o $1 $1.o -L$DB2PATH/lib -ldb2 -ldb2apie
 
# Copy the shared library to the sqllib/function subdirectory.
# Note: the user must have write permission to this directory.
rm -f $DB2PATH/function/$1
cp $1.so $DB2PATH/function/$1


bldudf のコンパイルおよびリンク・オプション

コンパイル・オプション

c++
C++ コンパイラー。

-KPIC
共用ライブラリー用の位置独立コードを生成します。

-I$DB2PATH/include
DB2 インクルード・ファイルのロケーションを指定します。 たとえば、$HOME/sqllib/include

-D_RWSTD_COMPILE_INSTANTIATE=0
Rogue Wave のクラスをインスタンス化しません。

-c
コンパイルのみを実行し、リンクは実行しません。 本書では、コンパイルとリンクが別個のステップであることを前提としています。

リンク・オプション

c++
コンパイラーをリンカーのフロントエンドとして使用します。

-G
共用ライブラリーを生成します。

-o $1
実行可能ファイルを指定します。

$1.o
プログラムのオブジェクト・ファイルを組み込みます。

-L$DB2PATH/lib
リンク時の DB2 静的ライブラリーおよび共用ライブラリーのロケーションを指定します。 たとえば、$HOME/sqllib/lib-L オプションを指定しないと、 コンパイラーはパスとして /usr/lib:/lib を想定します。

-ldb2
DB2 ライブラリーとリンクします。

-ldb2apie
DB2 API エンジン・ライブラリーとリンクして、LOB ロケーターを使用できるようにします。

他のコンパイラー・オプションについては、コンパイラーの資料をご覧ください。

ユーザー定義関数プログラム udfsrv をソース・ファイル udfsrv.c から作成するには、 次のように入力します。

   bldudf udfsrv

スクリプト・ファイルは、 UDF をサーバー上の sqllib/function というパスにコピーします。

必要であれば、UDF にファイル・モードを設定してクライアント・アプリケーションから実行できるようにします。

udfsrv を作成したなら、 それを呼び出すクライアント・アプリケーション udfcli を構築できます。 udfcli プログラムは、スクリプト・ファイル bldapp を使用して、 sqllib/samples/cpp にあるソース・ファイル udfcli.sqC から作成します。 詳細については、 "DB2 API と組み込み SQL アプリケーション"を参照してください。

UDF を呼び出すには、次の実行可能ファイル名を入力して、 サンプルの呼び出しアプリケーションを実行します。

   udfcli

この呼び出しアプリケーションは、 udfsrv ライブラリーの ScalarUDF 関数を呼び出します。

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

ptx/C++ を使用するマルチスレッド・アプリケーションは、 -Kthread でコンパイルおよびリンクする必要があります。

sqllib/samples/cpp にあるスクリプト・ファイル bldmt には、 組み込み SQL マルチスレッド・プログラムを作成するためのコマンドが含まれています。

第 1 パラメーター $1 には、ソース・ファイルの名前を指定します。 第 2 パラメーター $2 には、接続先のデータベースの名前を指定します。 第 3 パラメーター $3 にはそのデータベースのユーザー ID を、 また $4 にはパスワードを指定します。 第 1 パラメーター (ソース・ファイル名) だけが必須です。 データベース名、ユーザー ID、およびパスワードは任意指定です。 データベース名を指定しない場合、 プログラムはデフォルトの sample データベースを使用します。

#! /bin/ksh
# bldmt script file -- DYNIX/ptx
# Builds a C++ multi-threaded embedded SQL program
# Usage:  bldmt <prog_name> [ <db_name> [ <userid> <password> ]]
  
# Set DB2PATH to the location where DB2 will be accessed.
# The default is the standard instance path.
DB2PATH=$HOME/sqllib
# Precompile and bind the program.
embprep $1 $2 $3 $4
 
# Compile the program.
c++ -Kthread -I$DB2PATH/include -D_RWSTD_COMPILE_INSTANTIATE=0 -c $1.C
# Link the program.
c++ -Kthread -o $1 $1.o -L$DB2PATH/lib -ldb2 -lseq

上記の -Kthread オプションや、 リンクされているユーティリティー・ファイルがないという点だけでなく、 残りのコンパイルとリンクのオプションも、 組み込み SQL スクリプト・ファイル bldapp で使用されているものと同じです。 これらのオプションについては、 "DB2 API と組み込み SQL アプリケーション"を参照してください。

ソース・ファイル thdsrver.sqC からサンプル・プログラム thdsrver を作成するには、 次のように入力します。

   bldmt thdsrver

結果として、実行可能ファイル thdsrver が作成されます。 sample データベースに対してこの実行可能ファイルを実行するには、 次のように入力します。

   thdsrver


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