BINDとかGRANTって何? (1)

仕事で飛び交った言葉。C言語に関係するものらしい。
最近ちょっとC言語のコードを読む機会があるので調べてみた。

BIND

とりあえず、このPDFファイルにはこう書いてあった。

バインドとは、データベース・マネージャーがアプリケーションの実行時にデータベースをアクセスするために必
要とするパッケージを作成する処理です。バイディング中、データベース・マネージャーはSQL文で使用されてい
る表に関する統計情報を読み取り解析します。この統計情報からはデータベースをアクセスする最も効率のよい方
法が決定されます。これらのアクセス・プランはデータベースのシステム・カタログの中に保存されます。

わかったようなわからんような... アプリケーションがDBにアクセスするために必要な処理だということはわかったけど。
PDFをちゃんと読むと、組み込みSQLで使うものらしい。ソースコードを実行可能プログラムに変換する過程(ビルド・プロセス)の一つである。

1. データベースへの接続

db2 connect to 〜ってやつですね。

2. プリコンパイル

db2 prep sample.sqc bindfile
このコマンドを使うとsample.cとsample.bndという2つのファイルができる。前者はC言語の入門書でおなじみのソースコードだ! 組み込みSQLを使うにはsqc→cというプリコンパイルが必要なのね。
後者はバインドファイルと言われるもので、この中にSQL文に関する情報が入っているらしい。

3. バインド

db2 bind sample.bnd
ここで表の情報が解析されて、アクセス・プランが決まる。

4. コンパイル

xlc -c -l/home/$DB2INSTANCE/sqllib/include sample.c
-lオプションの後に続いているパスはデータベースマネージャのインクルードファイルの場所を指定している。ようやくコンパイルだ。これでできるのはexe...じゃなくて、オブジェクトファイル(samlple.o)

5. リンク

xlc -o sample sample.o -L/home/$DB2INSTANCE/sqllib/lib -ldb2
最後の処理。これでようやく実行モジュールsampleができる。
-Lオプションでデータベースマネージャのライブラリの場所を指定している。長い長い戦いだった。

集合研修中にJavaでDBにアクセスするWebアプリケーションを作ったけど、あのときは全然こんなこと意識しなかったなあ。DBアプリケーションは奥が深い。
とりあえず、この流れは覚えていこう。

GRANT

次回で(笑)