OracleD2kFormsのブロックからのPL/SQL表への移入
PL / SQL表は、Formsの暗黙的な入力組み込みTABLE_FROM_BLOCK。を使用してブロックから入力できます。 この非常に便利な機能により、ブロックを明示的にループする必要がなくなります。次の手順は、概念を示しています。PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)この手法を使用するには、次の手順に従います。
IS
/* Define a PL/SQL record with two fields code and name */
TYPE state_rec IS RECORD (code varhcar2(2), name varhcar2(30));
/* Define a PL/SQL table of the record defined above */
TYPE my_table IS TABLE OF state_rec INDEX BY BINARY_INTEGER;
my_table1 my_table;
/* Define a variable of type ITEMS_IN_BLOCK. ITEMS_IN_BLOCK is a
Forms-defined table */
Item_data ITEMS_IN_BLOCK;
Cnt NUMBER;
BEGIN
Item_data(1) := 'STATE_CODE';
item_data(2) := 'STATE_NAME';
/* The call to the Forms built-in TABLE_FROM_BLOCK retrieves the records
from the block and populates the my_table1 table of records */
TABLE_FROM_BLOCK(my_table1, 'STATE',1, ALL_RECORDS, item_data);
-- The SUCCESS or FAILURE of this built-in can be assessed
-- with FORM_SUCCESS, just like any other built-in
IF NOT FORM_SUCCESS THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
Cnt := my_table1.COUNT;
END populate_plsql_table;
- 入力として渡されるレコード構造と同等になるようにPL/SQLレコードを定義します。この場合、それは state_recです。 2つのアイテムCODEを構成します およびNAME STATE_CODEに対応 およびSTATE_NAME。
- PL / SQL表を、手順1で定義したタイプのレコードの表として定義します。この場合は、my_tableです。
注Oracleのドキュメントでは、PL /SQL表のタイプがPLITBLM.TABLE_OF_ANY、であると定義されています。 しかし、私が説明した方法でPL/SQL表を定義することはうまくいきます。
- タイプITEMS_IN_BLOCKの変数を定義します ( VARCHAR2のテーブル )そして、その個々の要素を、ステップ1で定義されたレコードタイプの要素として値が示されるブロックアイテム名の名前に設定します。
- 組み込みのTABLE_OF_ANYを呼び出します 定義されたPL/SQL表、入力ブロック名、開始レコード番号、終了レコード番号、およびステップ3で定義された変数がパラメータとして渡されます。