2

そのように定義された Oracle TYPE があるとします。

   TYPE rec_customized
   IS
      RECORD (
         SECRET_CODE       VARCHAR2 (16),
         PUBLIC_CODE       VARCHAR2 (6),
         COMMON            VARCHAR2 (40),
         EMAIL             VARCHAR2 (241),
         CITY              VARCHAR2 (40),
         NATION            VARCHAR2 (2),
         SURNAME           VARCHAR2 (40),
         NAME              VARCHAR2 (40),
         POLICY_NUMBER     VARCHAR2 (10),
         OLD_CODE          VARCHAR2 (11),
         NEARBY            VARCHAR2 (40),
         PROVINCE          VARCHAR2 (2),
         MARITAL_STATUS    VARCHAR2 (80),
         TELEPHONE         VARCHAR2 (30),
         LITTLE_MOUSE      VARCHAR2 (30),
         STREET            VARCHAR2 (60),
         GRAPE_CODE        VARCHAR2 (1)
      );

var01タイプという名前の変数があるとしますrec_customized

すべてのコンポーネントをインスタンス化した後、それらを「DBMS_OUTPUT.PUT_LINE」にしたい場合は、次のように記述する必要があります。

dbms_output.put_line (var01.secret_code);
dbms_output.put_line (var01.public_code);
dbms_output.put_line (var01.common);
dbms_output.put_line (var01.email);
.........
dbms_output.put_line (var01.grape_code);

rec_customized 型の変数 var01 のすべてのコンポーネントを順番に出力するために LOOP を記述する方法はありますか?

例えば:

FOR MY_INDEX IN 1..WhateverCouldBeHelpful
LOOP
  dbms_output.put_line (var01. .....??);
END LOOP;

Oracle 11G Release 2 を使用しています。

よろしくお願いいたします。

4

1 に答える 1

2

レコードは複合データ型です。レコードのフィールドをループすることはできません。PL/SQL ブロックでそのレコードを複数回参照する必要がある場合 -dbms_output.put_line()そのレコードの個々のフィールドの値を出力するために使用するには、ネストされたサブプログラムを定義し、レコードのすべてのフィールドを 1 回リストして、そのサブプログラムを使用することができます。 - 外側の PL/SQL ブロックのスコープ内で必要な回数だけプログラムします。

例:

declare
  type t_rec is record(
     field1 varchar2(11)
   );
  l_rec t_rec;
  procedure print_record(p_val in t_rec) is
  begin
    -- Here you list all p_val record's fields
    -- once and use this procedure as many times
    -- in scope of PL/SQL block this
    -- nested sub-program belongs to as needed
    dbms_output.put_line(p_val.field1);
  end;
begin
  -- [1] --
  select dummy
    into l_rec
    from dual;

  print_record(l_rec);
  -- [2] --
  l_rec.field1 := 'Other value';

  print_record(l_rec);
end;
/

結果:

X
Other value
PL/SQL procedure successfully completed
于 2013-10-31T11:27:26.510 に答える