sql >> データベース >  >> RDS >> Oracle

OracleD2kFormsのブロックからのPL/SQL表への移入

    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;

    この手法を使用するには、次の手順に従います。

    1. 入力として渡されるレコード構造と同等になるようにPL/SQLレコードを定義します。この場合、それは state_recです。 2つのアイテムCODEを構成します およびNAME STATE_CODEに対応 およびSTATE_NAME。

    2. PL / SQL表を、手順1で定義したタイプのレコードの表として定義します。この場合は、my_tableです。

    注Oracleのドキュメントでは、PL /SQL表のタイプがPLITBLM.TABLE_OF_ANY、であると定義されています。 しかし、私が説明した方法でPL/SQL表を定義することはうまくいきます。

    1. タイプITEMS_IN_BLOCKの変数を定義します ( VARCHAR2のテーブル )そして、その個々の要素を、ステップ1で定義されたレコードタイプの要素として値が示されるブロックアイテム名の名前に設定します。

    2. 組み込みのTABLE_OF_ANYを呼び出します 定義されたPL/SQL表、入力ブロック名、開始レコード番号、終了レコード番号、およびステップ3で定義された変数がパラメータとして渡されます。

    ヒントブロック内のすべてのレコードを渡すには、開始レコード番号として1を指定し、定数 ALL_RECORDSを指定します。 終了レコード番号として。

    TABLE_FROM_BLOCKの成功または失敗

    TABLE_FROM_BLOCKの成功または失敗 ほとんどの場合、FORM_SUCCESSによってトラップされる可能性があります。 ただし、例外があります。そのような例外の1つは、エラー FRM-40733:PL/SQL組み込みのTABLE_FROM_BLOCKが失敗しました。です。 この場合、それは FORM_SUCCESS、の1つではありません。 FORM_FAILURE、 またはFORM_FATAL。 エラー 多くの場合、 FORM_SUCCESSの代わりに便利です。 TABLE_FROM_BLOCKの成功または失敗を追跡するため この例でも、このエラーをトラップするのに役立ちます。上記のエラーは、存在しないブロック名が渡された場合、またはレコードの開始位置または開始位置と終了位置に負の値が渡された場合に発生します。ヒントもう1つの重要な注意点は、 TABLE_FROM_BLOCKです。 ブロックを暗黙的にループするため、 POST-QUERY レコードごとに実行されます。ただし、手動ループよりも高速です。 3,300レコードの結果セットの場合、WindowsNTで実行されているOracle8.0.5を使用した手動ループよりも3.5倍高速であることがわかりました。
    1. 結合されたセットにすべての値が含まれている必要がありますが、それ以上の値が含まれている可能性があるSQL

    2. AccessはODBCデータソースとどのように通信しますか?パート5

    3. MariaDBをMacにインストールする

    4. PHPを使用してMySQLデータベースに配列を挿入します