MINERVA superseeded IF/Prolog.
Please see
http://www.ifcomputer.co.jp/MINERVA
for details.
We discontinued to sell IF/Prolog Dec 31. 2003.
Dedicated technical support for IF/Prolog ended Dec 31 2008.
This site is maintained as a community service only.
IF/SQL述語を使用した動的なデータベース操作の完全なトランザクションは以下の手順で行なわれます。
1. SQLコマンドの宣言、RDBMSでの事前翻訳、及びそのコマンドのカーソルの定義(sql_declare/5)。
2. もしSQLコマンドのバインド変数があれば、これを具体化する。
3. コマンドの実行(sql_open/2)。
4. データのアクセス、アプリケーションへの転送(SQL SELECTコマンドのみ)
a) sql_fetch_buf/2 と sql_get_value/5
または
b) sql_descr_out/2 と sql_fetch/4
或は sql_fetch_n/5
5. いくつかのSQL INSERT、SQL UPDATE、SQL DELETEコマンドの実行後に、トランザクションのコミット(sql_commit/1)またはロールバック(sql_rollback/1)をする。
6. コマンドのカーソルの解放。
ユーザー許可、データ定義、データ検索、データ加工など、どのようなSQLコマンドでも上記の方法で実行することができます。
ステップ1とステップ3は常に実行されねばなりません。
ステップ2はバインド変数を持つコマンドの場合のみに必要です。
ステップ4aまたはステップ4bはSQL SELECTコマンドの場合のみに意味があります。
必ず、ステップ1、2、3、[4、5、] 6の順序で実行してください。
ステップ2、3 [、4]は何度でも実行できます。
様々なデータベース操作、すなわち異なるカーソルを持つコマンドを、並列に実行することができます。つまり、それらのデータベース操作はお互いにインタリーブしたり、ネストすることが出来ます。
sql_declare/5のCursor引数が`immediate'であるような呼出しは特別な意味を持っており、翻訳後すぐ指定されたSQLコマンドを実行します。(バインド変数またはselect変数は存在することができません!)。これはRDBMSによるコマンドの解釈実行を行なうsql_execute(+SqlCmd,-RC)と同等です。
なお、この述語は、一度以上呼び出せないSQLコマンドの代りに使うこともできます。その性能をダイナミックSQLコマンドと比べてみて下さい。
|