当嵌套表在记录类型中时,如何将数据填充到Oracle中的嵌套表中

one*_*e23 3 oracle plsql

我需要能够以游标变量的形式从过程返回值列表.但是在列表中,某些字段可以具有多个值

例如,产品可以在描述字段中具有多个描述行(从不同的表获得).

我正在考虑在记录类型中创建嵌套表并将其与游标相关联.

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;
Run Code Online (Sandbox Code Playgroud)

在这个过程中,我需要传递p_1给一个表并使用显式游标将数据检索到Field_1Field_2.

然后从另一个表我需要分配多个记录Field_3.

当表是记录中数据类型的一部分时,有人能告诉我如何将数据填充到嵌套表中吗?如何填充后我该如何检查.以及如何将其分配回out参数的游标变量?

kro*_*lko 6

本文档: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
Run Code Online (Sandbox Code Playgroud)