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

収集方法:OracleデータベースのPRIORおよびNEXT関数

    PL / SQLコレクション・メソッドの概要で見たように、OracleDatabaseには7つのコレクション関数があります。これらの7つの関数の中で、最初の5つの方法をすでに学習しました。 「Prior」と「Next」は、まだ調査する必要のある最後の2つのPL/SQLコレクションメソッド/関数です。

    したがって、今日のPL / SQLブログでは、これら2つの手つかずの収集方法について詳しく説明します。

    前および次の収集関数とは何ですか?

    コレクションのコンテンツをナビゲートするのに役立ついくつかの機能を身に付けておくことは常に良いことです。前と次の関数はそれらの関数である可能性があります。

    これらの関数は両方とも、コレクションのインデックスを入力として受け取り、結果を返します。

    たとえば、PL / SQLコレクション・メソッドPRIORは、入力として索引を受け取り、前の最下位の索引に格納されている値を返します。一方、収集メソッドNEXTは、次に高いインデックスから値を返します。

    前および次の収集機能または手順ですか?

    前と次はどちらも関数です。

    3種類のコレクションすべてでこれらの機能の両方を使用できますか?

    はい、Priorコレクション関数とNextコレクション関数の両方を3種類のコレクションすべてで使用できます。

    PL / SQLの前および次のコレクションメソッドがnullを返すのはいつですか?

    収集メソッドPriorは、使用可能な下付き文字値がない場合はnullを返し、収集メソッドNextは、返すことができる上付き文字値がない場合はnullを返します。

    簡単に言うと、これらのコレクション関数は、コレクションの最初と最後のインデックスでそれぞれ使用された場合、Nullを返すと言えます。 。

    連想配列で使用した場合、コレクションメソッドNextおよびPriorの出力はどうなりますか?

    収集メソッドPRIORおよびNEXTが連想配列で使用される場合、それらはVARCHAR2またはLONG​​データ型の出力を返します。

    これらのメソッドは、ある種の例外を発生させると聞きました。本当ですか?

    はい、そうです。これらの関数のいずれかが初期化されていないネストされたテーブルまたはVarrayに適用されると、COLLECTION_IS_NULL例外が発生します。

    コードでこれらの関数を使用する方法を教えていただけますか?

    もちろん!非常に簡単なコードを使用して、Priorコレクション関数とNextコレクション関数の両方のアプリケーションを紹介します。

    以前の収集方法の例。

    この方法では、ネストされたテーブルで事前に収集方法を使用する方法を学習します。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE my_nested_table IS
            TABLE OF NUMBER;
        var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
    BEGIN
            dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
            dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
    END;
    /
    

    上記の匿名PL/SQLブロックには、「PriorFunctionCall」を含む2つの出力ステートメントがあります。最初の出力ステートメントは、値が格納されているインデックス番号3の前のインデックス番号を返します。この場合、インデックス番号3より前のインデックスは2です。したがって、2が最初の出力ステートメントの出力になります。

    2番目の出力ステートメントでは、Prior関数を呼び出し、コレクションオブジェクトへの入力として提供しました。

    var_nt(var_nt.PRIOR(3)) 

    Oracleエンジンは、最初にコレクション関数Priorを実行し(これをパート1と呼びます)、パート1の結果を使用して、コレクションオブジェクトを実行し(パート2と呼びます)、最終結果を生成します。この場合は18になります。先に進み、コードをコピーして、自分で実行してみてください。

    ネストされたテーブルから以前の最低インデックスを削除するとどうなりますか?

    だから今問題は、私たちのコードで2である以前の最低のインデックスを削除するとどうなるかということです。その場合、結果は間違いなく同じにはなりません。以前の関数は、以前の最低のインデックスを返します。ただし、そのインデックスには何らかの値が含まれている必要があります。

    自分で試してみてください。これがコードです。

    DECLARE
        TYPE my_nested_table IS
            TABLE OF NUMBER;
        var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
    BEGIN
            var_nt.DELETE(2);
            dbms_output.put_line('Index prior to index 3 is '||var_nt.PRIOR(3)); 
            dbms_output.put_line('Value before 3rd Index is '||var_nt(var_nt.PRIOR(3))); 
    END;
    /
    

    次の収集方法の例。

    上記のコードでPrior関数を使用したのと同じように、PL/SQL収集メソッドNextを使用できます。収集メソッドNEXTは、次に高いインデックスから値を返します。これが例です

    DECLARE
        TYPE my_nested_table IS
            TABLE OF NUMBER;
        var_nt   my_nested_table := my_nested_table(9,18,27,36,45,54,63,72,81,90);
    BEGIN
            dbms_output.put_line('Next Higher Index to index 3 is '||var_nt.NEXT(3)); 
            dbms_output.put_line('Value after 3rd Index is '||var_nt(var_nt.NEXT(3))); 
    END;
    /
    

    両方の例は、コレクション関数呼び出しを除いてほとんど同じです。このPL/SQLブロックの実行セクションにも、2つの出力文があります。最初の出力ステートメントは次の空でないインデックス番号を返し、2番目の出力ステートメントはそのインデックスに格納されているデータを返します。これらの両方のステートメントの動作は、上記で説明したものと同じになります。先に進み、コードをコピーして出力を確認してください。

    これは、PL/SQLコレクション方式のNextおよびPriorに関する詳細なチュートリアルでした。あなたが読書を楽しんで、何か新しいことを学んだことを願っています。このブログをソーシャルメディアで共有してください。このブログをFacebookで共有するには、ここをクリックしてください。Twitterの場合は、ここをクリックしてください。

    ありがとう&素晴らしい一日を!


    1. ProxySQLとClusterControlを使用したMySQLとMariaDBのクエリキャッシュ

    2. Oracle Database Security:データベース監査

    3. MySQLデフォルトデータベース

    4. SQL Serverの内部:問題のあるオペレーターPt。 I –スキャン