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

Oracleデータベースで連想配列を作成する方法

    連想配列は、以前はPL / SQL 2(Oracle7に付属のPL/ SQLバージョン)ではPL / SQL表、Oracle8データベースでは表ごとの索引として知られていました。ネストされたテーブルとVARRAYに続いて、連想配列は開発者によって広く使用されている3番目のタイプのコレクションです。

    連想配列に関するいくつかの質問の答えを見つけて、それらをよりよく理解するのに役立てましょう。このセクションでは、連想配列とVARRAYやNestedTablesなどの他のコレクションとの主な相違点と類似点についても説明します。

    連想配列は制限されていますか、それとも制限されていませんか?

    ネストされたテーブルと同様に、連想配列は無制限の形式のコレクションです。 これは、保持できる要素の数に上限がないことを意味します。可変配列は本質的に制限されているため、VARRAYには同じことが当てはまりません。

    連想配列は永続的ですか、それとも非永続的ですか?

    ネストされたテーブルやVARRAYとは異なり、連想配列は非永続的な形式のコレクションです 。つまり、配列もデータもデータベースに格納できませんが、PL/SQLブロックでのみ使用できます。

    連想配列はまばらですか、それとも密ですか?

    VARRAYは密集した配列ですが、ネストされたテーブルと連想配列は疎密な配列です つまり、添え字の番号付けは一意である必要がありますが、必ずしも連続している必要はありません。

    データベースオブジェクトとして連想配列を作成できますか?

    非永続的な性質のため、連想配列をスキーマに格納することはできません。 PL / SQLブロックでのみ作成できますが、データベースオブジェクトとしてスキーマレベルで作成することはできません。

    連想配列を再利用できますか?

    上記のように、連想配列は非永続的なコレクションであり、スキーマレベルで作成できないため、スキーマに格納できないため、再利用できません。

    連想配列のインデックス番号/添え字番号は暗黙的ですか、それとも明示的ですか?

    ネストされたテーブルやVARRAYとは異なり、連想配列のインデックスは明示的です。 Oracle Engineがネストされたテーブルの要素に添え字/インデックス番号を割り当て、バックグラウンドでVARRAYコレクションを暗黙的に割り当てる場合、連想配列では、ユーザーはコレクションにデータを入力するときにインデックス番号を明示的に指定する必要があります。

    データはどのようにして連想配列に格納されますか?

    連想配列は、データをキーと値のペアで格納します。ここで、インデックス番号はキーとして機能し、セルに格納されたデータは値として機能します。

    これらは、試験や面接で期待できるいくつかの主要な質問です。連想配列と他のコレクションの技術的な違いを確認するために読んでください。

    PL / SQLコレクションの定義–連想配列?
    上記の質問から得られた情報を使用して、連想配列を、データをキーと値のペアに格納する1次元の同種のコレクションとして定義できます。それはまばらで、制限がなく、本質的に永続的ではありません。

    PL / SQL連想配列の構文は何ですか?

    TYPE aArray_name IS TABLE OF element_datatype [Not Null]
    INDEX BY index_elements_datatype;
    

    上記のように、連想配列は非永続的なタイプのコレクションであるため、スタンドアロンデータベースオブジェクトとして作成することはできません。したがって、他のコレクションのように再利用することはできません。 PL/SQLブロックでのみ使用できます。 PL/SQLブロックのDELCARATIONセクションに連想配列を作成してください。 [ここを読んで、PL / SQLブロックにいくつのセクションがあるかを確認しますか?]構文を詳しく見てみましょう:

    タイプ :キーワードはステートメントの始まりを示します。

    aArray_name :連想配列の名前。これは完全にユーザー定義であり、OracleDatabaseの命名基準に準拠しています。

    この表 :配列が保持する要素のタイプをコンパイラに指示するユーザーを使用するOracle Databaseの予約済みフレーズ?

    Element_Datatype :配列が保持しようとしている要素のデータ型。 Oracle Databaseでは、すべてのコレクションは本質的に同種です。つまり、コレクションのすべての要素は同じデータ型である必要があります。

    Not_null :オプションの句。これを使用すると、すべてのインデックスにNULLではなく対応する値が含まれるようになります。

    INDEX BY :どのユーザーが配列の添え字のデータ型を指定するかを使用する句。

    Index_elements_dataype :配列の添え字要素のデータ型。

    例:Oracleデータベースで連想配列を作成する方法

    連想配列はPL/SQLブロック内でのみ作成できるため、そのスコープは作成されたブロックに限定されます。つまり、そのブロックの外部では使用できません。 Oracleデータベースで連想配列を作成する方法を見てみましょう。

    ステップ1:連想配列を作成する

    	SET SERVEROUTPUT ON;
    	DECLARE
    	    TYPE books IS TABLE OF NUMBER
    	        INDEX BY VARCHAR2 (20);
    
    による番号インデックスの表です。

    上記のコードでは、「 Books」という名前の連想配列を作成しました ’は、NUMBERデータ型の要素とVARCHAR2データ型の添え字を保持できます。

    ステップ2:連想配列変数を作成する

    Isbn Books;

    プログラムで配列を参照するには、連想配列変数が必要です。配列変数は非常に簡単に作成できます。変数の名前(「 isbn」)を入力するだけです。 この場合)これはユーザー定義であり、その後に連想配列の名前が続きます。

    ステップ3:連想配列にデータを挿入する

    上記のように、連想配列はデータをキーと値のペアに保持します。したがって、他のコレクションとは異なり、ユーザーは配列の添え字(キー)とデータの両方を挿入する必要があります。

    BEGIN
    -- How to insert data into the associative array 
    isbn('Oracle Database') := 1234;
    isbn('MySQL') := 9876; 
    

    ネストされた表やVARRAYと同様に、PL/SQLブロックの実行セクションの連想配列にデータを挿入します。他のコレクションとは異なり、ここで気付いた場合は、データの挿入にINSERT DMLステートメントを使用せず、配列変数「isbn」を使用してデータを挿入しました。 。以下に、配列変数を使用した連想配列の挿入ステートメントの構文を示します。

    Array_variable (subscript/key) := data; 

    ご覧のとおり、連想配列にデータを挿入するには、最初に配列変数の名前を記述し、次に配列の添え字を記述し、次に配列のデータを記述する必要があります。

    ステップ4:コレクションのデータを更新する方法–連想配列?

    連想配列の値の更新は、挿入するのと同じくらい簡単です。値を変更する場合は、変更した値を挿入するために使用するのと同じステートメントを記述します。たとえば、キーMySQLに対する値を9876から1010に変更したい場合は、次のように記述します

    	-- How to update data of associative array.	
    	 	isbn('MySQL') := 1010; 
    

    ここでも、値を更新するためにUPDATEDMLを作成する必要はありません。配列変数を使用するだけです。

    ステップ5:コレクション-連想配列からデータを取得する方法

    値を挿入するためにInsertDMLステートメントが必要ないのと同様に、値を更新するためにUpdate DMLが必要ないのと同様に、値を取得するためにSelectDMLも必要ありません。

    キー「OracleDatabase」に対して保存された値を確認するとします。そのためには、書く必要があります…

    -- how to retrieve data using key from associative array.  	
    	  DBMS_OUTPUT.PUT_LINE ('Value '||isbn ('Oracle Database'));
    

    これらすべてのコードのチャンクを1つのプログラムにまとめましょう。

    SET SERVEROUTPUT ON;
    DECLARE
        TYPE books IS TABLE OF NUMBER
            INDEX BY VARCHAR2(20);
        isbn Books;
    BEGIN
        	-- How to insert data into the associative array 
        	isbn('Oracle Database') := 1234;
        	isbn('MySQL') := 9876;
        	DBMS_OUTPUT.PUT_LINE('Value Before Updation '||isbn('MySQL'));
    
        	-- How to update data of associative array.
        	isbn('MySQL') := 1010;
        
    -- how to retrieve data using key from associative array.  
        	DBMS_OUTPUT.PUT_LINE('Value After Updation '||isbn('MySQL'));
    END;
    /
    

    これがいくつかの細かい変更を加えたプログラムです。上記のPL/SQLプログラムは、キーを使用して1つの特定の値を取得する方法を示しています。ビデオチュートリアルを見て、ループを使用して連想配列からすべての値を取得する方法を学ぶことができます。そこで詳しく説明しました。

    このチュートリアルを終了する前に、知っておくべきいくつかの指針があります。これらのポインタは–

    • PL / SQL連想配列は、インデックスデータ型としてBINARY_INTEGER、PLS_INTEGER、POSITIVE、NATURAL、SIGNTYPE、またはVARCHAR2をサポートします。
    • RAW、NUMBER、LONG-ROW、ROWID、およびCHARは、サポートされていないインデックスデータ型です。

    要素データ型の場合、PL / SQLコレクションの連想配列がサポートします–

    • PL/SQLスカラーデータ型 :DATE、BLOB、CLOB、BOOLEAN、またはNUMBER&VARCHAR2とそのサブタイプ。
    • 推定データ :テーブル列、カーソル式、または事前定義されたパッケージ変数から継承されるデータ型に使用される用語
    • ユーザー定義タイプ: ユーザー定義のオブジェクトタイプまたはコレクションタイプ。

    これは、PL / SQLコレクション–連想配列に関する詳細なチュートリアルです。このチュートリアルでは、OracleDatabase認定試験と面接で期待できるすべてのトピックについて説明します。読書を楽しんでいただけたでしょうか。

    ソーシャルネットワークでこのブログを共有することで、他の人が何か新しいことを学ぶのを助けたり、より多くの人々に手を差し伸べたりするのを助けることができます。すべてのサポーター、視聴者、チャンネル登録者に大声で叫ぶのが大好きなので、タグを付けるのを忘れないでください。ありがとう&素晴らしい一日を!


    1. order by句が使用されていない場合、OracleSQLは任意の方法で行を返します

    2. EM12cデータベースの待機アラートの使用時間

    3. SQL ServerのWHERE句のアンパサンド(&)演算子

    4. WindowsからSQLServerへのOracleの接続