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

収集方法:Oracleデータベースでのトリム手順

    PL/SQLコレクションシリーズの最後のチュートリアルにようこそ。チャンネルでこれまでで最も長いビデオチュートリアルシリーズ。このチュートリアルでは、OracleDatabaseのTRIMプロシージャである最後のPL/SQLコレクションプロシージャについて学習します。

    PL / SQL収集メソッドTRIMとは何ですか?

    Oracle dbのコレクションメソッドTRIMは、コ​​レクションの最後から1つ以上の要素を削除できるオーバーロードされたプロシージャです。

    Oracle DatabaseでコレクションメソッドTRIMプロシージャを呼び出す方法はいくつありますか?

    PL / SQLコレクション・メソッドTRIMはオーバーロードされたプロシージャであるため、2つの異なる方法で呼び出すことができます。 TRIMプロシージャのこれら2つの異なる呼び出しは次のとおりです。

    1. TRIM:パラメータなしでプロシージャをトリムします。

    パラメータなしでTRIMプロシージャを使用すると、コレクションの最後から1つの要素のみが削除されます。

    1. TRIM:1つのパラメーターでプロシージャをトリムします。

    1つの引数を渡すことによって呼び出されるTRIMプロシージャは、パラメータで指定されたコレクションの最後からいくつかの要素を削除します。そのパラメーターは有効な整数でなければなりません。また、コレクションに含まれる要素の最大数を超えてはなりません。

    情報:ゼロ要素より下のスペースをトリミングしようとすると、トリミング手順でエラーが発生します。

    3種類のコレクションすべてでPL/SQLコレクションメソッドTRIMを使用できますか?

    残念ながら、できません。 PL / SQLコレクションのプロシージャEXTENDと同様に、プロシージャTRIMは、コ​​レクションのネストされた表とVARRAYでのみ使用できます。 ただし、連想配列では使用できません。

    連想配列でPL/SQLコレクション・プロシージャTRIMを使用するとどうなりますか?

    Oracleデータベースバージョンの収集メソッドTrimを連想配列で使用すると、コンパイル時エラーが発生します

    OracleDatabaseのTrimProcedureの仕様は何ですか?

    収集手順TRIMの仕様は次のとおりです。

    PROCEDURE TRIM (n PLS_INTEGER:= 1);

    nがNULLの場合、trimは何もしません。

    あなたがで言っているのを聞きました SUBSCRIPT_BEYOND_COUNT例外も取得できるビデオ

    はい、PL/SQLコレクションメソッドTRIMはSUBSCRIPT_BEYOND_COUNT例外を発生させます。コレクションに実際に存在するよりも多くの要素をトリミングしようとした場合。

    このブログの後半のビデオで示したこの例外の例を見つけることができます。あなたがビデオを見たいなら、それからここにあります。そうでない場合は、下にスクロールしてください。

    PL / SQLコレクションメソッドのトリムに関連して知っておくべき他の例外はありますか?

    はい、TRIMプロシージャに関連するもう1つの例外があります。それは、COLLECTION_IS_NULL例外です。

    収集プロシージャTRIMを初期化されていないネストされたテーブルまたはVARRAYに適用するたびに、コンパイラはCOLLECTION_IS_NULL例外を発生させます。

    TRIMプロシージャとDELETEプロシージャを一緒に使用できますか?

    いいえ、コレクションTRIMとDELETEプロシージャを一緒に使用することはできません。それらを互いに使用すると、予期しない結果が生じます。

    VARRAY変数の最後にある要素を削除し、その後、同じ要素にTRIMプロシージャを適用した場合のシナリオについて考えてみます。削除した可能性のある要素の数を推測できますか? 2つの要素が削除されたと誤解されるかもしれませんが、実際には1つだけが削除されています。 TRIMは、プロシージャDELETEによって残されたプレースホルダーに作用します。

    これらの紛らわしく不安な結果を回避するために、Oracleデータベースサポートでは、これら2つの手順を特定のコレクションでのみ使用することを強くお勧めします。

    例はどうですか?このブログでやっているかどうか?

    もちろん、このブログの例は間違いなく行います。実際、前述のPL/SQLコレクションプロシージャTRIM呼び出しのそれぞれのデモンストレーションを紹介しようとしていました。どうぞ:

    1。パラメータなしのPL/SQLコレクションプロシージャTRIM。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE my_nestedTable IS TABLE OF number;
        nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
    BEGIN
        nt_obj.TRIM;
        DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
        FOR i IN 1..nt_obj.COUNT
        LOOP
            DBMS_OUTPUT.PUT_LINE (nt_obj (i));
        END LOOP;
    END;
    / 
    

    2。パラメータ付きの収集手順TRIM。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE my_nestedTable IS TABLE OF number;
        nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
    BEGIN
        nt_obj.TRIM (3);
        DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
        FOR i IN 1..nt_obj.COUNT
        LOOP
            DBMS_OUTPUT.PUT_LINE (nt_obj(i));
        END LOOP;
    END;
    /
    

    3。 PL/SQL収集プロシージャTRIMSUBSCRIPT_BEYOND_COUNT例外。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE my_nestedTable IS TABLE OF number;
        nt_obj  my_nestedTable := my_nestedTable(1,2,3,4,5);
    BEGIN
        nt_obj.TRIM(6);
        DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
        FOR i IN 1..nt_obj.COUNT
        LOOP
            DBMS_OUTPUT.PUT_LINE (nt_obj(i));
        END LOOP;
    END;
    /
    

    SUBSCRIPT_BEYOND_COUNT例外は、コレクションの要素の総数よりも大きい引数を渡すと発生します。上記の例で使用するコレクションは、「my_nestedTable」という名前のネストされたテーブルであり、5つの数値要素が格納されています。ただし、プロシージャコールでは、コンパイラにTRIM 6要素を指示しましたが、これは絶対に不可能であるため、この場合、コンパイラはSUBSCRIPT_BEYOND_COUNT例外を発生させます。

    4。 VARRAYを使用した収集手順TRIM。

    SET SERVEROUTPUT ON;
    DECLARE
     TYPE inBlock_vry IS VARRAY (5) OF NUMBER;
     vry_obj inBlock_vry := inBlock_vry(1, 2, 3, 4, 5);
    BEGIN
        --TRIM without parameter
        vry_obj.TRIM;
        DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
        FOR i IN 1..vry_obj.COUNT
        LOOP
            DBMS_OUTPUT.PUT_LINE (vry_obj(i));
        END LOOP;
        --TRIM with Parameter
        vry_obj.TRIM (2);
        DBMS_OUTPUT.PUT_LINE ('After TRIM procedure');
        FOR i IN 1..vry_obj.COUNT
        LOOP
            DBMS_OUTPUT.PUT_LINE (vry_obj(i));
        END LOOP;
    END;
    /
    

    これは、OracleDatabaseのPL/SQLコレクション方式TRIMプロシージャの概念を説明するチュートリアルです。

    あなたがそれを気に入ったことを願っています。 Oracle Databaseの概念に関する最新情報や洞察については、Facebookページで私に連絡してください。ありがとう&素晴らしい一日を!


    1. OracleSQLDeveloperを使用したCLOBのテキストファイルへのエクスポート

    2. SQLServerテーブルの既存の列にデフォルトの制約を追加する方法-SQLServer/TSQLチュートリアルパート91

    3. AndroidとMSSQLSERVER2008の接続

    4. MYSQL count(*)またはcount(1)の何が優れていますか?