PL / SQL记录和表变量已更改

时间:2018-06-26 16:36:10

标签: oracle plsql oracle12c

我是Oracle PL / SQL的新手,已经被要求修改一些代码。我一直在浏览oracle文档,认为我知道它在做什么,但是想验证我的理解是否正确。

代码如下:

TYPE array_rec_type IS RECORD (gla_sub tblName.id%type);

v_closes_sc   array_rec_type;

TYPE v_sc_type is TABLE OF v_closes_sc%TYPE INDEX BY BINARY_INTEGER;

sc_array  v_sc_type;

以下是我在这里声明的内容:

  • TYPE array_rec_type是RECORD(gla_sub tblName.id%type);
    • 似乎使用tblName表的id列中的列类型声明了一个集合。可以是数字或UUID等。
  • v_closes_sc array_rec_type;
    • 正在创建新创建类型的变量
  • TYPE v_sc_type是BINARY_INTEGER表v_closes_sc%TYPE INDEX;
    • 正在使用先前为表创建的模板的集合(记录)来创建新类型。该表将具有一列ID。
  • sc_array v_sc_type;
    • 正在创建一个新变量来保存新表变量。

2 个答案:

答案 0 :(得分:2)

记录不是集合,因此您的解释有些混乱。 From the docs(您可能已经看过:

  

集合中,内部组件始终具有相同的数据类型,并称为元素。 ...要创建集合变量,可以定义一个集合类型,然后创建该类型的变量,或使用%TYPE

     

记录中,内部组件可以具有不同的数据类型,称为字段。您可以按名称访问记录变量的每个字段...要创建记录变量,可以定义RECORD类型,然后创建该类型的变量,或使用%ROWTYPE或{{1 }}。

那么看看你说的是什么

  

以下是我在这里声明的内容:

%TYPE

这是记录,而不是集合。在这种情况下,它只有一个名为TYPE array_rec_type IS RECORD (gla_sub tblName.id%type); 的字段,实际上是使用gla_sub表中id列的数据类型声明的。使用tblName意味着,在某种程度上,您不需要知道实际的数据类型,并且如果更改了代码,则不必更改代码(如果{{1 }}列增加了。)

%type

正确-正在创建新创建类型的变量。

varchar2

集合,特别是associative array。这是一个稀疏数组,其成员是上面声明的记录类型的实例,带有数字索引。也可以使用类型直接声明,例如:

v_closes_sc array_rec_type;
TYPE v_sc_type is TABLE OF v_closes_sc%TYPE INDEX BY BINARY_INTEGER;

正确-正在创建该表类型的新变量。


具有一个具有单个字段的记录类型似乎没有意义,因为您可以基于表列数据类型进行收集。但是,您现有的代码将期望使用这种结构,因此对其进行更改并不是一件容易的事。

答案 1 :(得分:0)

据我所知,您的理解是正确的。