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

収集方法:Oracleデータベースの最初と最後の関数

    OracleDatabaseの収集メソッドに関するシリーズにもう一度ようこそ。このシリーズのこれまでのところ、収集関数の数()と収集関数の存在()について説明してきました。あなたが読書を楽しんだことを願っています。今日、このPL / SQLチュートリアルでは、収集方法の最初()と最後()を学習します。

    収集方法FIRST()およびLAST()とは何ですか?

    コレクションで定義された最初と最後のインデックス値を知るために、コレクション関数First&Lastを使用します。

    これらの収集方法を任意の種類の収集で使用できますか?

    はい!これらの関数は両方とも、連想配列、ネストされたテーブル、VARRAYの3種類のコレクションすべてで使用できます。

    収集メソッドFIRST()およびLAST()がnullを返すのはいつですか?

    空のコレクションに適用された場合、または要素を持たない初期化コレクションに適用された場合、両方の関数はnullを返します。

    これら両方の機能の機能仕様をリストできますか?

    もちろん!なぜだめですか。収集関数FIRST()の仕様は次のとおりです。

    FUNCTION FIRST RETURN PLS_INTEGER | VARCHAR2

    また、収集関数LAST()の関数仕様は次のとおりです。

    FUNCTION LAST RETURN PLS_INTEGER | VARCHAR2

    情報:
    文字列インデックス付き連想配列の場合、これらのメソッドは文字列を返します。 「最低」と「最高」は、そのセッションで使用されている文字セットの順序によって決まります。

    VARRAYに要素が1つしかない場合はどうなりますか?

    その場合、収集関数FIRST()は常に1であり、収集メソッドLAST()は常にCOUNTに等しくなります。

    これらの関数を初期化されていないコレクションに適用した場合はどうなりますか?

    私は真剣に意味します、なぜあなたはそうするのですか!とにかく、コレクション関数FIRST&LASTを初期化されていないコレクションに適用すると、COLLECTION_IS_NULL例外が発生します。

    例:コレクションでコレクション関数FIRSTおよびLASTを使用するにはどうすればよいですか?

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE nt_tab IS TABLE OF NUMBER;
        col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
    BEGIN
        DBMS_OUTPUT.PUT_LINE ('First Index of the Nested table is ' || col_var.FIRST);
        DBMS_OUTPUT.PUT_LINE ('Last Index of the Nested table is ' || col_var.LAST);
    END;
    /
    

    上記の例では、NT_TABという名前のネストされたテーブルを作成し、コレクション変数col_varを使用して初期化しました。このネストされたテーブルには、値を格納した5つのインデックスがあります。このネストされたテーブルの最小のインデックスは1で、値は10で、最大のインデックスは5で値は50です。したがって、実行時に、最初のDBMS_OUTPUTからの結果は1になり、2番目のDBMS_OUTPUTステートメントからの結果は5になります。

    コードをコピーして、結果を自分でチェックアウトしてください。

    ネストされたテーブルの最初の要素を削除するとどうなりますか?次に、収集関数FIRSTの出力はどうなりますか?

    それはとても良い質問です!収集関数の最初の要素を削除すると、収集関数FIRSTは、1より大きく、データを保持している添え字を返します。例を見てみましょう:

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE nt_tab IS TABLE OF NUMBER;
        col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
    BEGIN
    col_var.DELETE(1);
        DBMS_OUTPUT.PUT_LINE ('First Index after DELETE is ' || col_var.FIRST);
    END;
    /
    

    上記の例では、コレクションメソッドDELETEを使用して、ネストされたテーブルnt_tabの最初の要素を削除しました。インデックス1の10である最初の要素を削除した後、新しい最下位の添え字は2になり、データが格納されます。したがって、実行すると結果は2になります。

    コレクションの途中から要素を削除するとどうなりますか?

    途中からデータを削除すると、収集関数LASTは、COUNTメソッドによって返される値よりも大きい値を返します。

    FIRSTおよびLASTコレクションメソッドを使用してコレクションのインデックスに格納されているデータを確認できますか?

    クラスでこれと同じ概念を説明しているときに、生徒が手を挙げて私に尋ねました。

    これまでのところ、これらの関数はコレクションのインデックス番号を返すことがわかります。これらのインデックスに保存されているデータを確認したい場合はどうでしょうか。これらの収集方法FIRST&LASTを使用して、インデックスに格納されているデータを確認する方法はありますか?

    この質問への答えは、はい!もちろん 。下付き文字番号とともに、これらの関数を使用して、コレクションの最低および最高のインデックスに格納されているデータを確認できます。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE nt_tab IS TABLE OF NUMBER;
        col_var nt_tab := nt_tab(10, 20, 30, 40, 50);
    BEGIN
        -- This output statement will return 10 which is the value stored at the first index
        DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.FIRST));
        -- This output statement will return 50 which is the value stored at the last index
        DBMS_OUTPUT.PUT_LINE ('Value stored at First Index is ' || col_var(col_var.LAST));
    END;
    /
    

    最初と最後のインデックスに格納されているデータを表示するには、これらの関数の関数呼び出しを、 col_varであるコレクション変数の括弧内に配置する必要があります。 上記の例と同じように。

    ここで問題は、コレクションをトリムするとどうなるかです。 次に、収集関数LASTの出力はどうなりますか?先に進み、ビデオチュートリアルをチェックしてください ここで、例を使用してコレクションをトリミングすると、コレクションメソッドLASTの出力がどうなるかを説明しました。

    これらの収集方法については以上です。このブログがお役に立てば幸いです。ありがとう&素晴らしい一日を!


    1. CentOSにMySQL8をインストールする手順

    2. SQLServerへのファイルの保存

    3. pghoardAlternatives-ClusterControlを使用したPostgreSQLバックアップ管理

    4. SQLCONVERT日付関数を使用するさまざまな方法