【初心者用】ProCとは

今度の案件でデータベースの操作関係で、Pro*Cを使用することになりそうなので今回学んでみようと思います。

1. そもそもPro*Cって何?


Oracle Pro*C/C++プリコンパイラとは、Oracleプリコンパイラという高水準ソース・プログラムで埋め込みSQL分を使用可能にするプログラミングツールになります。


プリコンパイラはソース・プログラムを入力として受け入れ、埋め込みSQL文を標準Oracleランタイム・ライブラリ・コールに変換することで、通常の方法でコンパイル・リンク及び実行できる変換済みソース・プログラムを生成します。

2. Pro*Cを使用する理由


Pro*C/C++プリコンパイラを使用する理由としては、アプリケーション・プログラムに強力で柔軟なSQLを使用することができるからです。

Pro*C/C++は便利で利用しやすいインターフェースにより、アプリケーションからOracleに直接アクセスすることができます。


Pro*C/C++はアプリケーションの微調整に役立つことができ、リソースの使用状況やSQL文の実行状況や各種ランタイム・インジケーターを監視することができます。

これにより、この情報に基に最大パフォーマンスが得られるようなプログラム・パラメータを変更することができます。


また、多くのアプリケーション開発ツールなどとは異なり、Pro*C/C++ではアプリケーションを高度にカスタマイズすることができます。

ですので、バックグラウンドで実行するアプリケーションやウィンドウ機能・マウス技術を取り込んだユーザーインターフェースを作成するなどもできます。


このような、プリコンパイルを行うことにより、アプリケーションの開発プロセスの工程が増えることになりますが時間を効率よく使用することができます。

また、Pro*C/C++によりホスト変数の分析、構造体から列へのマッピングの定義が行われて、SQLCHECK=FULLに設定することにより埋め込みSQL分の意味分析を行うことができます。

3. 埋め込みSQLについて


埋め込みSQLとはアプリケーション・プログラムに記述されているSQL文のことで、SQL文を含むアプリケーション・プログラムはホストプログラムとも呼ばれています。

また、ホストプログラムの記述言語はホスト言語と呼ばれており、Pro*C/C++ではSQL分をCかC++ホストプログラムに埋め込んで使用することができます。


埋め込みSQL文はホスト言語となっており、直接解釈することができないのでホスト言語で扱えるように変換する必要があります。

このような時にホスト言語がCまたはC++言語の場合は、この変換をPro*C/C++プリコンパイラで行うことができます。

4. Pro*C/C++プリコンパイラの利点


Pro*C/C++を使用することにより、以下のことが可能になります。


・CまたはC++言語でアプリケーションを作成すること。

・ANSI/ISO規格に従って高水準言語にSQL文を埋め込むこと。

・動的SQLを利用すること。動的SQLとは、プログラム実行時に適切なSQL文を受け入れるか作成する、高度なプログラミング技法です。

・高度にカスタマイズしたアプリケーションを設計および開発すること。

・共有サーバー・プロセス・アプリケーションを作成すること。

・Oracleの内部データ型と高水準言語のデータ型の間で自動的な変換を実行すること。

・アプリケーション・プログラムにPL/SQLトランザクション処理ブロックを埋め込むことで、パフォーマンスを向上すること。

・役立つプリコンパイラ・オプションをインラインまたはコマンドラインで指定し、その値をプリコンパイル中に変更すること。

・データ型の同値化を使用して、Oracleで入力データを解釈し出力データをフォーマットする方法を制御すること。

・複数のプログラム・モジュールを別々にプリコンパイルし、それらをリンクして1つの実行プログラムにすること。

・埋め込まれたSQLデータ操作文とPL/SQLブロックの構文と意味を全面的にチェックすること。

・Oracle Netを使用して、複数のノード上のOracleデータベースに同時にアクセスすること。

・配列を入力プログラム変数および出力プログラム変数として使用すること。

・様々な環境で実行できるように、ホスト・プログラムのコード・セクションを条件付きでプリコンパイルすること。

・高水準言語で作成されたユーザー・イグジットを使用した、SQL*Formsとの直接インタフェース。

・SQL通信領域(SQLCA)およびWHENEVER文またはDO文を使用して、エラーおよび警告を処理すること。

・Oracle通信領域(ORACA)により提供される強力な診断機能を使用すること。

・データベース内でユーザー定義のオブジェクト型を処理すること。

・データベースでコレクション(VARRAYおよびネストした表)を使用すること。

・データベースでラージ・オブジェクト(LOB)を使用すること。

・データベースに格納された各国語キャラクタ・セット・データを使用すること。

・プログラム内でOracle Call Interface(OCI)関数を使用すること。

・マルチスレッド・アプリケーションを使用すること。

5. 埋め込みSQL構文


作成したアプリケーション・プログラムでは、完全なSQL文と完全なCプログラムを自由に混在させ、SQL文にC言語の変数や構造体を使用できます。

SQL文をホスト・プログラム内に作成する場合の唯一の特殊要件は、SQL文をEXEC SQLキーワードで開始し、セミコロンで終了することです。

Pro*C/C++では、すべてのEXEC SQL文がSQLLIBランタイム・ライブラリへのコールに変換されます。


多くの埋込みSQL文は、新しい句が追加される点、またはプログラム変数が使用される点のみが同等の対話型SQLと異なります。

次の例は、対話型ROLLBACK文と埋込みROLLBACK文の対比を示しています。


 ■ROLLBACK WORK: -- interactive

 ■EXEC SQL ROLLBACK WORK; -- embedded

この2つの文の効果は同じですが、対話型SQL環境(SQL*Plusの実行時など)では前者を、Pro*C/C++プログラムでは後者を使用します。

6. 静的SQL文と動的SQL文


ほとんどのアプリケーション・プログラムは、静的SQL文と固定的なトランザクションを処理するように設計されています。

この場合、実行前にそれぞれのSQL文およびトランザクションの構成が認識できます。

つまり、どのSQLコマンドが発行され、どのデータベースの表が変更され、どの列が更新されるかなどが事前にわかっています。


ただし、アプリケーションによっては、任意の有効なSQL文を実行時に受け入れて処理することを要求される場合もあります。

したがって、関係するSQLコマンド、データベース表および列が実行時までわからないことがあります。


動的SQLは、実行時のプログラムでSQL文を受け入れるか作成し、データ型の変換を明示的に制御する高度なプログラミング技術です。