4

カーソル変数の形式で値のリストをプロシージャから返せるようにする必要があります。ただし、リスト内の一部のフィールドは複数の値を持つことができます

たとえば、製品の説明フィールドに複数の説明行を含めることができます (別のテーブルから取得)。

レコード型内にネストされたテーブルを作成し、これをカーソルに関連付けることを考えていました。

TYPE N_TYPE IS TABLE OF VARCHAR2(350);
TYPE TYPE1 IS RECORD ( FIELD_1 VARCHAR2(100)
                      , FIELD_2 VARCHAR2(30)
                      , FIELD_3 N_TYPE);

TYPE T_CUR IS REF CURSOR RETURN TYPE1;

Procedure p_proc (p_1 IN VARCHAR2, p_2 OUT t_cur) is
  -- processing input parameter and passing out a cursor to host application
end p_proc;

この手順では、テーブルに渡し、明示的なカーソルを使用しておよびp_1にデータを取得する必要があります。Field_1Field_2

次に、別のテーブルから、複数のレコードを に割り当てる必要がありますField_3

テーブルがレコード内のデータ型の一部である場合、ネストされたテーブルにデータを入力する方法を誰か教えてもらえますか? そして、データが入力されたらどうすれば確認できますか。そして、これを out パラメータのカーソル変数に割り当てる方法は?

4

1 に答える 1

8

このドキュメント: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/composites.htm#CIHIEBJC
では、PL/SQL でコレクション型を操作する方法について説明しています:

基本的な例:

DECLARE
   TYPE N_TYPE IS TABLE OF VARCHAR2(350);
   TYPE TYPE1 IS RECORD ( FIELD_1 VARCHAR2(100)
                      , FIELD_2 VARCHAR2(30)
                      , FIELD_3 N_TYPE);
   v_n n_type;
   v_type1 type1;
BEGIN
   v_n := n_type(); -- initialize an empty collection
   v_n.extend( 3 ); -- add 3 elements to the table
   v_n( 1 ) := 'First string ';
   v_n( 2 ) := 'Second string ';
   v_n( 3 ) := 'Third string ';
   v_n.extend; -- add 1 element at the end of the table
   v_n( v_n.last ) := 'Next string';

   --assign the table to the field_3 of the record
   v_type1.field_3 := v_n;

   -- check values
   FOR i in v_type1.field_3.first .. v_type1.field_3.last LOOP
      DBMS_OUTPUT.PUT_LINE(  v_type1.field_3( i ) );
   END LOOP;
END;
/

--- DBMS_OUTPUT -------
First string 
Second string 
Third string 
Next string
于 2013-08-03T10:02:24.383 に答える