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

OracleDatabaseでデータベースオブジェクトとしてVARRAYを作成する方法

    PL / SQLブロック・メンバーとして作成されるVARRAYの範囲は、それが作成されたブロックに限定されます。つまり、このVARRAYをそのブロックの外で使用したり、再利用したりすることはできません。これが最大の欠点です。ですから、先に進んで読んで、VARRAYのこの欠点を克服する方法を見つけてください。

    PL / SQLブロックの外部にVARRAYを作成し、それをスキーマに永続的に格納する方法を見つけることができれば、この欠点は簡単に克服できます。幸い、VARRAYをデータベースオブジェクトとして作成することで、両方の目標を達成できます。それがまさにこのチュートリアルで学ぶことです。

    このチュートリアルでは、学習します–

    • データベースオブジェクトとしてVARRAYを作成する方法。
    • そのVARRAYの使用方法。
    • VARRAYにデータを挿入する方法。
    • VARRAYに(から)データを取得する方法
    • VARRAYのデータを更新する方法。

    最初のステップから始めましょう。

    VARRAYをデータベースオブジェクトとして作成するには?

    	SET SERVEROUTPUT ON;
    	CREATE OR REPLACE TYPE dbObj_vry IS VARRAY (5) OF NUMBER;
    	/
    

    上記のコードが正常に実行されると、dbObj_vryという名前のVARRAYが作成されます。このVARRAYのサイズ制限は5要素で、データ型はNUMBERです。このVARRAYはスコープが広く、PL / SQLブロック内だけでなく、他のスキーマ・オブジェクトでも使用できます。

    データベースオブジェクトとして作成されたVARRAYの使用方法

    VARRAYをデータベースオブジェクトとして定義する利点は、VARRAYを使用する権限を持つ任意のプログラムから参照できることです。 VARRAYは、表、レコード、またはPL/SQLブロックでも使用できます。

    例を見てみましょう:

    例1.VARRAYを使用してテーブルの列を定義するにはどうすればよいですか?

    CREATE TABLE calendar(
        day_name        VARCHAR2(25),
        day_date        dbObj_vry
    );
    /
    

    上記のコードでは、day_nameとday_dateの2つの列を持つCalendarという名前のテーブルを作成しました。最初の列はVARCHAR2データ型のデータを保持できますが、2番目の列はVARRAYであるdbObj_vry型のデータを保持できます。

    情報:テーブルの列をVARRAYタイプとして定義するとはどういう意味ですか?
    テーブルの列をVARRAYタイプとして定義することは、テーブルに「n」個の値を保持できることを意味します。ここで、「n」はそのVARRAYのサイズ制限と同じです。この場合、VARRAYのサイズ制限は5です。これは、テーブルCalendarの「DayDate」列が5つの値を保持できることを意味します。

    VARRAYにデータを挿入する方法

    INSERT INTO calendar ( day_name, day_date ) 
    VALUES ( 'Sunday', dbObj_vry (7, 14, 21, 28) );    
    

    このinsertDMLステートメントは、Calendarテーブルに行を挿入します。 varchar2データ型の最初の列「DayName」にデータを挿入するのは簡単です。必要なデータを書き込み、一重引用符で囲む必要があります。ただし、VARRAYタイプの2番目の列「DayDate」については同じではありません。 VARRAYタイプの列にデータを挿入するには、最初にVARRAYの名前を書き込んで、データを指定する必要があります。

    また、4つのことを確認する必要があります

    1. 提供するデータは括弧で囲む必要があります。
    2. データのデータ型は、VARRAYの要素のデータ型(この場合はNUMBER)と一致する必要があります。
    3. 列に挿入する要素の数は、VARRAYのサイズ制限以下である必要があります。この場合は5であり、4つの要素を列に挿入しています。これは完全に問題ありません。しかし、6つの要素を列に挿入すると、エラーが発生します。
    4. VARRAY列に複数のデータを挿入する場合は、セミコロンを使用して要素を互いに分離してください。

    VARRAYからデータを取得する方法

    SELECTステートメントを使用してデータを取得できます。正しく記述されたSELECTステートメントはすべて機能します。例

    SELECT * FROM calendar;

    これにより、テーブルカレンダーからすべてのデータが取得されます。

    VARRAYタイプのデータを保持している列に格納されているデータをリレーショナル形式で表示する場合は、TABLE式を使用できます。例

    SELECT 
        tab1.day_name, 
        vry.column_value AS "Date"
    FROM calendar tab1, TABLE (tab1.day_date) vry;
    

    このSELECTステートメントは、両方の列のデータをリレーショナル形式で表示します。 TABLE式は、コレクションインスタンスを開き、オブジェクト行をリレーショナル形式で表すことができます。

    VARRAYタイプの列のデータを更新するにはどうすればよいですか?

    VARRAYタイプの列の値を更新するのは非常に簡単です。以下の例は、day_date列の値を更新する方法を示しています。

    UPDATE calendar 
    SET day_date = dbObj_vry(10,14,21,28) 
    WHERE day_name = 'Sunday';
    

    例2.PL/SQLブロックでVARRAYを使用する方法

    上記の例では、データベースオブジェクトとして作成されたVARRAYを使用してテーブルの列を定義する方法を学習しました。次に、PL/SQLブロック内で同じVARRAYを使用する方法を説明します。

    DECLARE
        vry_obj dbObj_vry    := dbObj_vry();
    BEGIN
        FOR i IN 1..vry_obj.LIMIT
        LOOP
            vry_obj.EXTEND; 
            vry_obj(i):= 10*i;
            DBMS_OUTPUT.PUT_LINE(vry_obj(i));    
        END LOOP;
    END;
    /
    

    この例は、前回のチュートリアルで見ました。今回は、ブロック内でVARRAYを定義する代わりに、スタンドアロンデータベースオブジェクトとして作成したことを除いて、ここではそのような大きな変更はありません。上記のコードを詳細に説明した最後のチュートリアルをご覧になることをお勧めします。

    これは、OracleでVARRAYをデータベースオブジェクトとして作成する方法に関するPL/SQLチュートリアルです。あなたが読書を楽しんだことを願っています、もしそうなら、あなたのソーシャルでこのブログをあなたの友人と共有することを忘れないでください。ありがとう&素晴らしい一日を!


    1. 複数の列のチェック制約

    2. 同時アクセス時にテーブル内の特定の行数をマークする方法

    3. SQLでは、2つのテーブルが相互に参照しても問題ありませんか?

    4. PostgreSQL関数の言語sqlと言語plpgsqlの違い