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

OracleのPLSQLレコードとは

    OraclePLSQLレコード

    • PLSQLレコードは複合データ型です。これは、フィールドとしての関連データ項目のグループであり、それぞれに独自の名前とデータ型があります。
    • PL / SQLレコードは、構造がデータベース表の行に似ています。レコード内の各スカラーデータ型は値を保持します。
    • レコードは、任意のスカラー、PL / SQLレコード、またはPL/SQL表タイプのコンポーネントで構成されます。
    • 単一のユニットとして操作できます。レコードには、必要な数のフィールドを含めることができます。

    OraclePLSQLレコードを宣言する方法

    A)ユーザー定義のPLSQLレコード

    DECLARE TYPE employee_record_type IS RECORD 
     (emp_id NUMBER(10) NOT NULL,
     dept_no dept.deptno%TYPE,
     nаme varchar2(20),
     hire_dаte DATE := SYSDATE
     Last_name varchar2(20)
     );
     employee_record employee_record_type;

    (1)スカラーデータ型の場合のように、レコードの事前定義されたデータ型はありません。したがって、最初に作成してから割り当てる必要があります

    (2)レコードの各フィールドには、一意の名前と特定のデータ型があります

    (3)%TYPE 指定されたテーブルの列と同じタイプの変数を宣言するために使用されます。

    (4)TYPEを使用します。 。 。独自のレコード・タイプを作成するためのRECORD文は、レコードのフィールドがBOOLEANなどのPL/SQL固有のタイプである必要がある場合です。 %ROWTYPEを使用すると、すべてのフィールドのデータ型がSQL型に制限されます

    (5)レコード自体はPL / SQL固有のデータ型であるため、ユーザー定義のレコード型のもう1つの優れた機能は、レコード型を別のフィールドとして定義できることです。 レコードタイプ

    DECLARE 
     TYPE emp_phone IS RECORD
     (
     Stdcode      PLS_INTEGER,
     phn_number   PLS_INTEGER,
     extension    PLS_INTEGER
     );
     TYPE contact_phone IS RECORD
     (
     day_phone#    emp_phone,
     eve_phone#    emp_phone,
     cell_phone#   emp_phone
     );
     sales_rep contact_phone;

    B)定義することもできます テーブル行タイプとして記録

    DECLARE sales_data_rec apps.sales_data%ROWTYPE;

    1)これにより、テーブルまたはビューの列のコレクションに基づいてレコードを宣言できます

    2)データベーステーブルで%ROWTYPEプレフィックスを使用して宣言します

    3)レコード内のフィールドは、テーブルの列から名前とデータ型を取得します

    C)%ROWTYPEを使用して、カーソル内のSELECTステートメントと同じ構造を持つレコードを宣言することもできます。

    これは、テーブルから列のサブセットをフェッチする場合、または複数のテーブルから列をフェッチする場合に特に役立ちます。

    DECLARE 
     CURSOR emp_cur
     IS
     SELECT lastname, age,firstname FROM employees;
     l_employee   emp_cur%ROWTYPE;

    カーソルからPL/SQL変数にデータをフェッチするときは常に、そのカーソルに基づいて%ROWTYPEを使用してレコードを宣言し、そのレコードにフェッチする必要があります。このように、カーソルのSELECTリストが変更されると、レコード内のフィールドの数とタイプがそれに応じて変更され、すべてが同期されたままになります。

    OraclePLSQLレコードに値を渡す方法

    構文 使用法
    rec_name.col_name:=value; レコードの特定の列に値を直接割り当てるため。
    rec_name.column_name:=value; レコードが%ROWTYPEを使用して宣言されている場合に、レコードの特定の列に値を直接割り当てること。
    SELECT column1、column2 INTO rec_name.col_name1、rec_name.col_name2 FROMtable_name[WHERE句]; データベーステーブルのレコードの各フィールドに値を割り当てる。
    SELECT * INTO record_name FROMtable_name[WHERE句]; データベーステーブルからレコード内のすべてのフィールドに値を割り当てる。
    variable_name:=record_name.col_name; レコード列から値を取得し、それを変数に割り当てるため。

    これらの他のPLSQL投稿を読む必要があります

    OraclePLSQLのブロック構造とタイプ
    Oracleplsqlの面接に関する質問
    Oraclesqlおよびplsqlのクイックチュートリアル


    1. 挿入中のデータ型の不一致(コード20)

    2. ORA-12519 TNS:適切なサービスハンドラーが見つかりません

    3. SQLにLIKEとINの組み合わせはありますか?

    4. 固定幅フィールドの一括挿入