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

前
次

ユーザー・イグジットの作成

SQL*Formsユーザー・イグジットの作成には、次の文を使用できます。

  • ホスト言語

  • EXEC SQL

  • EXEC ORACLE

  • EXEC IAF GET

  • EXEC IAF PUT

この項では、SQL*Formsとユーザー・イグジット間での値の受渡しを可能にするEXEC IAF GET文およびEXEC IAF EXEC IAF PUT文を中心に説明します。

変数の要件

EXEC IAF文で使用される変数は、フォーム定義で使用されるフィールド名に対応している必要があります。ブロック名を指定しなかったためにフィールド参照があいまいな場合は、エラーが発生します。フォーム・フィールドに無効な参照またはあいまいな参照を行うと、エラーが発生します。

ホスト変数の名前は、ユーザー・イグジットの宣言部で指定し、EXEC IAF文では前にコロン(:)を付ける必要があります。

注意:

インジケータ変数は、EXEC IAF GET文およびEXEC IAF PUT文では使用できません

IAF GET文

この文を使用すると、ユーザー・イグジットでフォーム上のフィールドから値を取得し、ホスト変数に割り当てることができます。ユーザー・イグジットでは、それらの値を計算、データ操作、更新などに使用できます。GET文の構文は次のとおりです。

EXEC IAF GET field_name1, field_name2, ...
 INTO :host_variable1, :host_variable2, ...;

field_nameには、次のSQL*Forms変数のどれを指定してもかまいません。

  • フィールド

  • block.field

  • システム変数

  • グローバル変数

  • フィールド、block.field、システム変数またはグローバル変数の値を含むホスト変数(前にコロンが付く)

field_nameは修飾されていない場合、一意であることが必要です。

次の例は、ユーザー・イグジットでどのようにフィールド値をGETし、ホスト変数に割り当てるかを示しています。

EXEC IAF GET employee.job INTO :new_job;

フィールド値はすべて文字列です。値を取得すると、GET文はフィールド値を対応するホスト変数のデータ型に変換します。無効またはサポートされていないデータ型への変換が試みられると、エラーが発生します。

前の例では、block.fieldの指定に定数が使用されています。ブロック名およびフィールド名の指定には、次のようにホスト文字列も使用できます。

set blkfld = 'employee.job';
EXEC IAF GET :blkfld INTO :new_job;

フィールドが一意でない場合、ホスト文字列には間にピリオドの入った完全なblock.field参照が含まれている必要があります。たとえば、次の使用方法は無効です。

set blk = 'employee';
set fld = 'job';
EXEC IAF GET :blk.:fld INTO :new_job;

1つのGET文のフィールド・リストに明示的フィールド名とストアド・フィールド名を混在させることはできますが、1つのフィールド参照ではできません。たとえば、次の使用方法は無効です。

set fld = 'job';
EXEC IAF GET employee.:fld INTO :new_job;

IAF PUT文

この文を使用すると、ユーザー・イグジットで定数およびホスト変数の値をフォームのフィールドに指定できます。このようにして、ユーザー・イグジットによりSQL*Formsの画面に任意の値やメッセージを表示できます。PUT文の構文は次のとおりです。

EXEC IAF PUT field_name1, field_name2, ...
 VALUES (:host_variable1, :host_variable2, ...);

field_nameには、次のSQL*Forms変数のどれを指定してもかまいません。

  • フィールド

  • block.field

  • システム変数

  • グローバル変数

  • フィールド、block.field、システム変数またはグローバル変数の値を含むホスト変数(前にコロンが付く)

次の例では、ユーザー・イグジットでどのように数字の定数、文字列定数およびホスト変数をフォームのフィールドにPUTするかを示しています。

EXEC IAF PUT employee.number, employee.name, employee.job
 VALUES (7934, 'MILLER', :new_job);

GETと同様に、PUTでもホスト文字列を使用して、次のようにブロックやフィールドの名前を指定できます。

set blkfld = 'employee.job';
EXEC IAF PUT :blkfld VALUES (:new_job);

キャラクタモードの端末では、フィールドにPUTされた値は、フィールドが現在の表示ページ上にある場合、割り当てられたときではなく、ユーザー・イグジットから戻されたときに表示されます。ブロックモードの端末では、次回デバイスからフィールドが読み取られたときに値が表示されます。

ユーザー・イグジットで1つのフィールドの値が数回変更された場合、最後の変更のみが有効です。