在Oracle PL / SQL中键入without body

时间:2015-09-28 17:58:43

标签: oracle plsql

我在跟踪初始化为空Type(varchar2表)对象的数组时遇到问题。它位于一个循环中,并从我认为来自数据库的输出中输出索引。我已经用"作为varchar2"的表格完成了我的研究。我认为它只是表示一个以varchar作为类型的表的列。

根据我的理解," invArry"声明为类型" item_val"在" item_inv" header只是基本上意味着invArry是一个varchar,因为item_val是一个varchar吧?但是当我在item_inv体中时,我很困惑,invArry再次被初始化为item_val。它是否再次初始化为varchar?或者类型item_val是否已指向数据库中的列?如果是后者,我不确定它是如何指向数据库的。

    create or replace TYPE "item_inv" AS OBJECT
    (invArry item_val,    --invArry declared as item_val
    CONSTRUCTOR FUNCTION item_inv
             RETURN SELF AS RESULT,
    CONSTRUCTOR FUNCTION item_inv( recrd VARCHAR2 )
             RETURN SELF AS RESULT,
    ) FINAL;

======

    create or replace TYPE BODY "item_inv" AS

    CONSTRUCTOR FUNCTION item_inv
             RETURN SELF AS RESULT
       IS
       BEGIN
          invArry := item_val    --invArry initialized to item_val. Whut
          RETURN;
       END;

======

    create or replace TYPE "item_val" AS TABLE OF VARCHAR2( 240 );
    --item_val object, does this points already to the database or just an empty object

1 个答案:

答案 0 :(得分:1)

您已将item_val定义为a nested table集合。

在您的对象类型中invArry属于该类型,因此它是一个嵌套表 - 即一个无序的字符串集合,每个字符串最多240个字符。

在您的对象类型正文中,您将invArry初始化为空集合:

invArry := item_val();

它没有初始化为varchar,它初始化为一个空的嵌套varchars表。它不指向数据库中的任何数据,表或列。它是一个没有元素的集合。您现在可以编写代码来向该集合添加元素。这些值可能来自数据库中的其他位置,但没有自动链接。