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

OracleデータベースのVALUES-OFバインド句を含むFORALLステートメント

    これまで、下限と上限の句を使用した密なコレクションと、INDICESOFのバインドされた句を使用した疎なコレクションでFORALLステートメントを使用する方法を学習しました。コレクションの選択された要素でのみFORALLステートメントを使用したい場合はどうなりますか?できますか?はい、「VALUES-OF」である3番目で最後にバインドされた句を含むFORALLステートメントを使用して簡単に行うことができます。

    「Values-of」バインド句とは何ですか?

    FORALLステートメントは、コレクション要素を単一のDMLステートメントに最適化された方法でバインドすることを目的としています。 FORALLステートメントの「Values-of」バインド句を使用して、コレクションの選択した要素をDMLステートメントにバインドできます。

    「Values-of」バインド句の構文は何ですか?

    バインドされた句の値がどのように機能するかを理解する前に、その構文を見て、OracleデータベースのFORALLステートメントで「Values-of」句を使用する構文的に正しい方法を学びましょう。

    FORALL idx IN VALUES OF indexing-collection
    [Save exception]
    DML/MERGE statement;
    

    情報:
    句の名前はVALUE-OFではなくVALUES-OFであることを常に忘れないでください。 VALUE-OFを書き込むとエラーが発生し、プログラムが終了する可能性があります。
    権利の価値
    間違った価値

    Values-of bound句はどのように機能しますか?

    バインドされた句の値には、2つのコレクションが必要です。最初のコレクションは「ソースコレクション」になります 。 FORALLステートメントを使用して、このコレクションのデータの挿入、削除、更新などのDML操作を実行します。

    2番目のコレクションは「インデックスコレクション」になります ’は、最初のコレクションから選択された要素のインデックス番号を指定します。これらの選択された要素は、DML操作を実行する要素になります。

    As Values-of bound句は、FORALLステートメントのループインデックス(上記の構文では「idx」)変数の値が、別のコレクションの要素の値に基づくことを指定します。したがって、上記の構文では、別のコレクションをIndexing-collectionと呼んでいます。

    では、このインデックスコレクションとは何ですか?

    インデックスコレクションは、FORALLステートメントがループできるインデックスのグループです。このコレクションは、密集したコレクションでも、疎なコレクションでもかまいません。また、コレクションに格納されているインデックス番号は一意である必要はなく、任意の順序でリストできます。

    Values-of句に知っておくべき制限はありますか?

    はい、OracleDatabaseのvalues-ofbound句を操作する前に知っておく必要のあることがいくつかあります。これらの制限は–

    • インデックスコレクションは、ネストされたテーブルまたは連想配列である必要があります。
    • インデックスコレクションが連想配列の場合は、PLS_INTEGERまたはBINARY_INTEGERでインデックスを作成する必要があります。
    • インデックスコレクションの要素は、PLS_INTEGERまたはBINARY_INTEGERのいずれかである必要があります。

    値の例-OracleデータベースのFORALLステートメントを使用したバインドされた句の例:

    ステップ1:テーブルを作成する

    CREATE TABLE tut_79 (
        selected_data     NUMBER(5)
    );
    

    ステップ2:OracleデータベースでFORALLステートメントでValues-of句を使用する方法を示すPL/SQLブロックを記述します。

    SET SERVEROUTPUT ON;
    DECLARE
        --Source collection
        TYPE My_NestedTable IS TABLE OF NUMBER;
        source_col My_NestedTable := My_NestedTable (9,18,27,36,45,54,63,72,81,90);
        
        --Indexing collection
        TYPE My_Array IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
        index_col My_Array;
    BEGIN
        --Initializing indexing collection with the index numbers.
        index_col   (1) :=  3;
        index_col   (5) :=  7;
        index_col   (12):=  8;
        index_col   (28):=  10;
        --FORALL statement 
        FORALL idx IN VALUES OF index_col
            INSERT INTO tut_79 VALUES (source_col (idx));
    END;
    /
    

    このコードの詳細な説明は、ビデオチュートリアルで見ることができます。そこで、このPL/SQLブロックのすべての行を詳細に説明しました。

    これは、OracleDatabaseのFORALLステートメントでValues-ofbound句を使用する方法に関するチュートリアルです。お役に立てば幸いです。このブログを友達のソーシャルメディアで共有してください。また、YouTubeチャンネルに登録して、より有益で興味深いチュートリアルを入手してください。

    ありがとう、そして素晴らしい一日を。


    1. PL-SQLのcontains()はどのように機能しますか?

    2. Rails4の移行でカスタム主キーを設定する際の問題

    3. PostgreSQLで制約の名前を見つける方法

    4. SQLServerで複数の列をピボットする方法