OracleデータベースでのDELETEプロシージャ
収集方法の概要で説明したように、7つの収集関数と3つの収集手順があります。したがって、合計で10の収集方法があり、そのうち7つの収集機能についてはこれまでに説明しました。したがって、本日、このチュートリアルでは、OracleDatabaseのDELETEプロシージャである最初のPL/SQLコレクションプロシージャについて説明します。
PL / SQLコレクションメソッドDeleteとは何ですか?
コレクションメソッドDELETEは、コレクションから要素を削除するオーバーロードされたプロシージャです。
オーバーロードされたプロシージャとはどういう意味ですか?
あなたはそれを正しく聞いた。 PL / SQLコレクション・メソッドDELETEは、オーバーロードされたプロシージャです。つまり、同じ手順を3つの異なる方法で使用できます 。これらの3つの異なる方法は–
- 削除 :パラメータなしの単純なプロシージャ呼び出し。したがって、PL / SQLコレクション・プロシージャDELETEをパラメータなしで使用すると、コレクションからすべての要素が削除されます 。
- DELETE( index-number ) :単一のパラメーターを使用したプロシージャー呼び出し。この単一のパラメーターは、コレクションの有効なインデックス番号です。有効なインデックス番号を渡すことによって呼び出された収集プロシージャDELETEは、特定のインデックスの要素を削除します 。
- DELETE( start-index、ending-index ) : 2つのパラメーターを使用したプロシージャー呼び出し。 DELETEプロシージャを呼び出すこの方法は、範囲削除と呼ばれます。 。このように、2つのインデックスを指定する必要があります。そして、プロシージャはstarting-indexとending-indexの間にある要素の範囲を削除します 。
コレクションが文字列インデックス付きの連想配列の場合、開始インデックスと終了インデックスは文字列です。それ以外の場合、開始インデックスと終了インデックスは整数です。
すべてのコレクションでOracleデータベースのDELETEプロシージャを使用できますか?
はい、コレクションメソッドDELETEを使用できます。3つのタイプのコレクションすべてに使用できます。これらは–ネストされたテーブル、VARRAY、および連想配列です。
待って!しかし、VARRAYでDELETEプロシージャを使用すると、まばらなコレクションが作成されませんか?
VARRAYはスパースコレクションではないため、個々の行を削除することはできません。さらに、VARRAYで実行できる唯一のプロシージャ呼び出しは最初のものです。これは、コレクションからすべての要素を削除する引数のないコレクションメソッドDELETEです。 VARRAYから個々の行を削除する唯一の方法は、TRIMを呼び出す別のプロシージャを使用して行の最後からトリミングすることです。
収集メソッドDELETEで例外が発生する可能性はありますか?
はい、PL/SQLコレクションメソッドDELETEに関連する例外があります。プロシージャDELETEが初期化されていないネストされたテーブルとVARRAYに適用されると、「Collection_is_Null」例外が発生します。
PL/SQLコレクションメソッドDELETEの例。
上記の各プロシージャDELETE呼び出しの例をいくつか見てみましょう。
例1:引数なしの単純なプロシージャ呼び出し。
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Range Delete var_nt.DELETE; FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
引数なしでコレクションプロシージャDELETEを呼び出すと、それが適用されるコレクションのすべての要素が削除されます。同様に、上記の例では、プロシージャDELETEを適用した「my_nested_table」という名前のネストされたテーブルがあります。したがって、正常に実行されると、プロシージャ呼び出しは、そこに格納されている10個の数値要素をすべて削除します。
推奨読書:PL/SQLブロックに対してローカルにネストされた表を作成する方法。
例2:単一のパラメーターを使用したプロシージャ呼び出し
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN DBMS_OUTPUT.PUT_LINE('After Deleted'); --Delete Specific Index var_nt.DELETE(5); IF var_nt.EXISTS(5) THEN DBMS_OUTPUT.PUT_LINE('Value at Index [5] is '|| var_nt(5)); ELSE DBMS_OUTPUT.PUT_LINE('Data is Deleted'); END IF; END; /
この単一のパラメーターは、コレクションの有効なインデックス番号です。さらに、有効なインデックス番号を渡して呼び出された収集プロシージャDELETEは、特定のインデックスの要素を削除します。したがって、上記の例では、PL/SQLコレクションメソッドDELETEの引数として5を指定しました。したがって、正常に実行されると、プロシージャコールは、インデックス5に格納されているコレクションから要素を削除します。
例3:2つのパラメーターを使用したプロシージャ呼び出し。
DECLARE TYPE my_nested_table IS TABLE OF NUMBER; var_nt my_nested_table := my_nested_table(2,4,6,8,10,12,14,16,18,20); BEGIN --Delete Range var_nt.DELETE(2,6); FOR i IN 1..var_nt.LAST LOOP IF var_nt.EXISTS(i) THEN DBMS_OUTPUT.PUT_LINE('Value at Index ['||i||'] is '|| var_nt(i)); END IF; END LOOP; END; /
DELETEプロシージャを呼び出すこの方法は、範囲削除と呼ばれます。ここでは、2つのインデックスを指定する必要があり、プロシージャは、starting-indexとending-indexの間にある要素の範囲を削除します。上記の例では、開始インデックスを2に設定し、終了インデックスを6に設定しています。これは、実行時に、プロシージャ呼び出しDELETEがこの範囲に含まれるすべての要素を削除することを意味します。
上記のコードをSQLDeveloperにコピーして自分で実行し、出力を確認してください。
上記のすべての例のライブ説明については、同じトピックに関するビデオチュートリアルを視聴することもできます。
これは、OracleDatabaseのPL/SQLコレクション方式DELETEに関するチュートリアルです。あなたが読書を楽しんで、何か新しいことを学んだことを願っています。このブログをソーシャルメディアで共有してください。 PL / SQLのより興味深い概念については、Facebookページにも参加してください。
ありがとう&素晴らしい一日を!