プライマリ・コンテンツに移動
Oracle® Database Oracleプリコンパイラのためのプログラマーズ・ガイド
12c リリース1 (12.1)
B71398-03
目次へ移動
目次
索引へ移動
索引

前
次

EXEC TOOLS文

EXEC TOOLS文では、ユーザー・イグジットからの取得、設定および例外コールバックを処理する包括的な方法を提供することにより、基本的なOracle Toolset(Oracle Forms、Oracle ReportsおよびOracle Graphics)をサポートします。この後の説明はOracle Formsが中心になっていますが、Oracle ReportsおよびOracle Graphicsについても概念は同じです。

EXEC SQL、EXEC ORACLEおよびホスト言語文の他にも、次のEXEC TOOLS文を使用してOracle Formsユーザー・イグジットを記述できます。

  • SET

  • GET

  • SET CONTEXT

  • GET CONTEXT

  • MESSAGE

EXEC TOOLS GET文およびEXEC TOOLS SET文は、SQL*Formsで使用されるEXEC IAF GET文およびEXEC IAF PUT文に相当します。IAF GETおよびIAF PUTとは異なり、TOOLS GETおよびTOOLS SETはインジケータ変数を受け入れます。EXEC TOOLS MESSAGE文は、メッセージ処理関数のSQLIEMに相当します。EXEC TOOLS SET CONTEXT文およびEXEC TOOLS GET CONTEXT文は新しく、SQL*Formsバージョン3にはありません。

注意:

COBOLおよびFORTRANにはポインタ・データ型がないため、Pro*COBOLまたはPro*FORTRANのプログラムでは、SET CONTEXT文およびGET CONTEXT文は使用できません。

EXEC TOOLS SET

EXEC TOOLS SET文は、ユーザー・イグジットからOracle Formsに値を渡します。具体的には、ホスト変数および定数の値をOracle Formsの変数および項目に割り当てます。これらの値は、ユーザー・イグジットからフォームに制御が戻った後に表示されます。

EXEC TOOLS SET文を記述するには、次の構文を使用します。

EXEC TOOLS SET form_variable[, ...]
 VALUES ({:host_variable[:indicator] | constant}[, ...]);

form_variableは、Oracle Formsのフィールド、パラメータ、システム変数、グローバル変数、またはこれらのうちの1つの名前を含むホスト変数(接頭辞としてコロンが付く)です。

次のPro*Cの例では、ユーザー・イグジットによって従業員名(オプションのインジケータ付き)がOracle Formsに渡されます。

EXEC SQL BEGIN DECLARE SECTION;
 ...
 char ename[20];
 short ename_ind;
EXEC SQL END DECLARE SECTION;
...
strcpy(ename, "MILLER");
ename_ind = 0;
EXEC TOOLS SET emp.ename VALUES (:ename:ename_ind);

この例で、emp.enameはOracle Formsのblock.fieldです。

EXEC TOOLS GET

EXEC TOOLS GET文は、Oracle Formsからユーザー・イグジットに値を渡します。具体的には、Oracle Formsの変数および項目の値を、ホスト変数に割り当てます。値が渡されるとすぐに、ユーザー・イグジットではそれらを任意の目的に使用できます。

EXEC TOOLS GET文を記述するには、次の構文を使用します。

EXEC TOOLS GET form_variable[, ...]
 INTO :host_variable[:indicator][, ...];

form_variableは、Oracle Formsのフィールド、パラメータ、システム変数、グローバル変数、またはこれらのうちの1つの名前を含むホスト変数です。

次の例では、Oracle Formsがblock.fieldのemp.enameからユーザー・イグジットに従業員名を渡します。

EXEC SQL BEGIN DECLARE SECTION;
 ...
 char ename[20];
EXEC SQL END DECLARE SECTION;
...
EXEC TOOLS GET emp.ename INTO :ename;

EXEC TOOLS SET CONTEXT

EXEC TOOLS SET CONTEXT文を使用すると、あるユーザー・イグジット・コールのコンテキスト情報を、別のユーザー・イグジット・コールのために保存できます。SET CONTEXTは、EXEC TOOLS GET CONTEXT文で後から参照できるホスト言語のポインタ変数の名前を指定します。ポインタ変数は、コンテキスト情報が格納されているメモリーのブロックを指します。SET CONTEXT文を使用すれば、情報を保存するためにグローバル変数を宣言する必要はありません。

EXEC TOOLS SET CONTEXT文を記述するには、次の構文を使用します。

EXEC TOOLS SET CONTEXT :host_pointer_variable
 [IDENTIFIED] BY context_name;

オプションのIDENTIFIEDキーワードは読みやすさを改善するために使用でき、context_nameは未宣言の識別子、またはコンテキスト領域を命名する文字ホスト変数です。

次の例では、ユーザー・イグジットで、後から使用するためのコンテキスト情報を保存します。

EXEC SQL BEGIN DECLARE SECTION;
 ...
 char context1[30];
EXEC SQL END DECLARE SECTION;
...
strcpy(context1, "This is context1");
EXEC TOOLS SET CONTEXT :context1 BY my_app1;

この例では、コンテキスト名my_app1は未宣言の識別子です。C言語の場合、引数としてCHAR型の配列が使用されているとき、配列名はその配列に対するポインタと同じになります。

EXEC TOOLS GET CONTEXT

EXEC TOOLS GET CONTEXT文は、ホスト言語のポインタ変数の値を取得して、ユーザー・イグジットに渡します。ポインタ変数は、コンテキスト情報が格納されているメモリーのブロックを指します。

EXEC TOOLS GET CONTEXT文を記述するには、次の構文を使用します。

EXEC TOOLS GET CONTEXT context_name INTO :host_pointer_variable;

context_nameは、未宣言の識別子、またはコンテキスト領域を命名する文字ホスト変数です。

次のPro*Cの例では、ユーザー・イグジットは、前に保存されたコンテキスト情報に対するポインタを取得します。

EXEC SQL BEGIN DECLARE SECTION;
 ...
 char *ctx_ptr;
EXEC SQL END DECLARE SECTION;
...
EXEC TOOLS GET CONTEXT my_app1 INTO :ctx_ptr;

この例では、コンテキスト名my_app1は未宣言の識別子です。

EXEC TOOLS MESSAGE

EXEC TOOLS MESSAGE文は、ユーザー・イグジットからOracle Formsにメッセージを渡します。このメッセージは、ユーザー・イグジットからフォームに制御が戻った後に、Oracle Formsのメッセージ行に表示されます。

EXEC TOOLS MESSAGE文を記述するには、次の構文を使用します。

EXEC TOOLS MESSAGE message_text [severity_code];

message_textは引用符付き文字列または文字ホスト変数、オプションのseverity_codeは整定数またはホスト変数です。MESSAGE文では、インジケータ変数は受け入れられません

次のPro*Cの例では、ユーザー・イグジットからOracle Formsに、エラー・メッセージと重大度コードが渡されます。

EXEC TOOLS MESSAGE 'Bad field name! Please reenter.' 15;