ランタイム・コンテキストは、通常は単にコンテキストと呼ばれ、クライアント・メモリーの領域へのハンドルです。このクライアント・メモリーには、0個以上の接続、0個以上のカーソル、そのインライン・オプション(MODE、HOLD_CURSOR、RELEASE_CURSOR、SELECT_ERRORなど)および他の状態情報が含まれます。
コンテキスト・ホスト変数を定義するには、sql_context疑似型を使用します。次に例を示します。
sql_context my_context ;
CONTEXT ALLOCATEプリコンパイラ・ディレクティブを使用し、コンテキスト用のメモリーを割り当てて初期化します。
EXEC SQL CONTEXT ALLOCATE :context ;
context
は、コンテキストへのハンドルであるホスト変数です。次に例を示します。
EXEC SQL CONTEXT ALLOCATE :my_context ;
CONTEXT USEプリコンパイラ・ディレクティブを使用して、プログラム・ロジックの流れではなく、ソース・ファイルのその点から埋込みSQL文(CONNECT、INSERT、DECLARE CURSORなど)で使用するコンテキストを定義します。このコンテキストは、別のCONTEXT USE文の検出時まで使用されます。構文は次のとおりです。
EXEC SQL CONTEXT USE {:context | DEFAULT} ;
DEFAULTキーワードでは、以降に実行されるすべての埋込みSQL文で使用されるデフォルト(またはグローバル)・コンテキストが指定されます。このコンテキストは、別のCONTEXT USEディレクティブが検出されるまで使用されます。単純な例を次に示します。
EXEC SQL CONTEXT USE :my_context ;
コンテキスト変数my_context
が定義および割り当てられていない場合、エラーが戻されます。
CONTEXT FREE文を使用すると、コンテキストに使用されたメモリーが不要になった場合に、メモリーを解放できます。
EXEC SQL CONTEXT FREE :context ;
次に例を示します。
EXEC SQL CONTEXT FREE :my_context ;
次の例は、ユーザー定義コンテキストと同じアプリケーションにおけるデフォルト・コンテキストの使用方法を示しています。
CONTEXT USEの例
#include <sqlca.h> #include <ociextp.h> main() { sql_context ctx1; char *usr1 = "scott/tiger"; char *usr2 = "system/manager"; /* Establish connection to SCOTT in global runtime context */ EXEC SQL CONNECT :usr1; /* Establish connection to SYSTEM in runtime context ctx1 */ EXEC SQL CONTEXT ALLOCATE :ctx1; EXEC SQL CONTEXT USE :ctx1; EXEC SQL CONNECT :usr2; /* Insert into the emp table from schema SCOTT */ EXEC SQL CONTEXT USE DEFAULT; EXEC SQL INSERT INTO emp (empno, ename) VALUES (1234, 'WALKER'); ... }