Oracle PL/SQL レコード タイプと例

レコードタイプとは何ですか?

レコード型は複雑なデータ型であり、プログラマーが希望する列構造を持つ新しいデータ型を作成できます。

  • XNUMX つ以上の列をグループ化して新しいデータ型を形成します
  • これらの列には独自の名前とデータ型があります。
  • レコードタイプはデータを受け入れることができます
    • 多くの列で構成される単一のレコードとして、または
    • レコードの特定の XNUMX つの列の値を受け入れることができます
  • レコード タイプとは、単に新しいデータ タイプを意味します。 レコード タイプが作成されると、それは新しいデータ タイプとしてデータベースに保存され、プログラムで変数を宣言するために同じデータ タイプが使用されます。
  • キーワードを使用します 'タイプ' 新しいデータ型を作成していることをコンパイラに指示します。
  • 「」で作成できます。データベースレベル」 これはデータベース オブジェクトとして保存したり、データベース全体で使用したり、「」で作成したりできます。サブプログラムレベル」、サブプログラム内でのみ表示されます。
  • データベース レベルのレコード タイプをテーブル列に対して宣言して、単一の列に複雑なデータを保持することもできます。
  • これらのデータ型のデータにアクセスするには、variable_name、ピリオド演算子 (.)、column_name の順に参照します (例: ' 。 '

データベースレベルでの宣言の構文:

Oracle PL/SQLレコードのタイプ

CREATE TYPE <type_name_db> IS RECORD
(
<column 1> <datatype>,
);

最初の構文では、キーワード「CREATE TYPE」が示されています。これは、データベース オブジェクトとして指定された列を持つ「type_name_db」という名前のレコード タイプを作成するようにコンパイラーに指示します。

これは、ブロック内ではなく、個別のステートメントとして指定されます。

サブプログラムレベルでの宣言の構文:

Oracle PL/SQLレコードのタイプ

DECLARE
TYPE <type_name> IS RECORD
(
<columnl> <datatype>,
);
BEGIN
<execution_section>;
END;

構文では、サブプログラム内にのみ「type_name」という名前のレコード タイプを作成しています。

どちらの宣言方法でも、列とデータ型を定義する方法は似ています。

例 1: データベース オブジェクトとしての RECORD タイプ

このプログラムでは、データベース オブジェクトとして「レコード タイプ」を作成する方法を見ていきます。 XNUMX つの列を持つレコード タイプ「emp_det」を作成します。 列とそのデータ型は次のとおりです。

  • EMP_NO (番号)
  • EMP_NAME (VARCHAR2 (150))
  • マネージャー (番号)
  • 給与 (数字)
CREATE TYPE emp_det IS OBJECT
(
EMP_NO NUMBER,
EMP_NAME VARCHAR2(150),
MANAGER NUMBER,
SALARY NUMBER 
);
/

出力:

Type created

コードの説明:

  • 上記のコードは、タイプ emp_det をデータベース オブジェクトとして作成します。
  • 定義されているように、emp_no、emp_name、manager、salary の 4 つの列があります。
  • 現在、「emp_det」は他のものと似ています データ・タイプ (NUMBER、VARCHAR@ など) そして、それはデータベース全体で表示されます。 したがって、これをデータベース全体で使用して、この型の変数を宣言できます。

出力:

データベース レベルでレコード タイプとしてタイプ「emp_det」を作成しました。

例 2: サブプログラム レベルのレコード タイプ - 列レベルのアクセス

この例では、サブプログラム レベルでレコード タイプを作成する方法と、そこから列レベルで値を設定してフェッチする方法を見ていきます。

サブプログラム レベルで「emp_det」record_type を作成し、同じものを使用してデータを入力し、そこからデータを表示します。

Oracle PL/SQLレコードのタイプ

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER, 
EMP_NAME VARCHAR2(150),
MANAGER NUMBER, 
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
guru99_emp_rec.emp_no:= 1001;	
guru99_emp_rec.emp_name:=:'XXX';	
guru99_emp_rec.manager:= 1000;	
guru99_emp_rec.salary:=10000;	
dbms_output.put.line('Employee Detail');
dbms_output.put_line ('Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line ('Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line ('Employee Salary: ' ||guru99_emp_rec.salary); 
dbms_output.put_line ('Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

出力:

Employee Detail
Employee Number: 1001
Employee Name: XXX
Employee Salary: 10000 
Employee Manager Number: 1000

コードの説明:

  • コード行 2 ~ 8: レコード タイプ 'emp_det' は、データ型 NUMBER、VARCHAR2、NUMBER、NUMBER の列 emp_no、emp_name、salary、manager で宣言されています。
  • コード行 9: guru99_emp_rec 変数は「emp_det」データ型として宣言されています。 さて、これ 変数 上記の 4 つのフィールド/列をすべて含む値を保持できます。
  • コード行 11: 「guru99_emp_rec」の「emp_no」フィールドに値 1001 を設定します。
  • コード行 12: 「guru99_emp_rec」の「emp_name」フィールドに値 XXX を入力します。
  • コード行 13: 「guru99_emp_rec」の「manager」フィールドに値 1000 を設定します。
  • コード行 14: 「guru99_emp_rec」の「salary」フィールドに値 10000 を入力します。
  • コード行 15 ~ 19: 出力に「guru99_emp_rec」の値を表示します。

例 3: サブプログラム レベルのレコード タイプ - 行レベルのアクセス

この例では、サブプログラム レベルでレコード タイプを作成する方法と、それを行レベルとして設定する方法を見ていきます。 サブプログラム レベルで「emp_det」record_type を作成し、同じものを使用してデータを入力し、そこからデータを表示します。

Oracle PL/SQLレコードのタイプ

DECLARE
TYPE emp_det IS RECORD
(
EMP_NO NUMBER,
EMP_NAME YARCHAR2( 150),
MANAGER NUMBER,
SALARY NUMBER
);
guru99_emp_rec emp_det;
BEGIN
INSERT INTO emp (emp_no, emp_name, salary, manager) VALUES (1002,'YYY',15000,1000);
COMMIT;
SELECT emp_no, emp_name, salary, manager INTO guru99_emp_rec FROM emp WHERE emp_no=1002;
dbms_output.put_line (‘Employee Detail’);
dbms_output.put_line (‘Employee Number: '||guru99_emp_rec.emp_no); 
dbms_output.put_line (‘Employee Name: '||guru99_emp_rec.emp_name); 
dbms_output.put_line (‘Employee Salary: '||guru99_emp_rec. salary); 
dbms_output.put_line (‘Employee Manager Number: '||guru99_emp_rec.manager);
END;
/

コードの説明:

  • コード行 2 ~ 8: レコード タイプ 'emp_det' は、データ型 NUMBER、VARCHAR2、NUMBER、NUMBER の列 emp_no、emp_name、salary、manager で宣言されています。
  • コード行 9: guru99_emp_rec 変数は「emp_det」データ型として宣言されています。 これで、この変数は上記の 4 つのフィールド/列をすべて含む値を保持できるようになります。
  • コード行 11: テーブル emp に、emp_no としてデータ 1002、emp_name として YYY、給与として 15000、マネージャー番号として 1000 を設定します。
  • コード行 12: 上記の挿入トランザクションをコミットします。
  • コード行 13: 従業員番号 99 の選択クエリから行レベルのデータとして「guru1002_emp_rec」変数を設定します。
  • コード行 15 ~ 19: 出力に「guru99_emp_rec」の値を表示します。

出力:

Employee Detail 
Employee Number: 1002 
Employee Name: YYY 
Employee Salary: 1000 
Employee Manager Number: 15000

ご注意: レコード タイプは、その値を任意の出力モードにリダイレクトする間、列レベルでのみアクセスできます。