我是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;
以下是我在这里声明的内容:
答案 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)
据我所知,您的理解是正确的。