ホスト言語
EXEC SQL
EXEC ORACLE
EXEC IAF GET
EXEC IAF PUT
この項では、SQL*Formsとユーザー・イグジット間での値の受渡しを可能にするEXEC IAF GET
文およびEXEC IAF EXEC IAF PUT
文を中心に説明します。
この文を使用すると、ユーザー・イグジットでフォーム上のフィールドから値を取得し、ホスト変数に割り当てることができます。ユーザー・イグジットでは、それらの値を計算、データ操作、更新などに使用できます。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;
この文を使用すると、ユーザー・イグジットで定数およびホスト変数の値をフォームのフィールドに指定できます。このようにして、ユーザー・イグジットにより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つのフィールドの値が数回変更された場合、最後の変更のみが有効です。