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

Oracle PL/SQL记录和表变量已更改,oracle,plsql,oracle12c,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_ar

我是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 IS RECORD (gla_sub tblName.id%type);
  • 类型array\u rec\u TYPE为记录(gla\u sub-tblName.id%TYPE);
    • 似乎正在使用tblName表中id列中的列类型声明集合。可以是数字或UUID等
  • v_关闭_sc阵列_rec_类型;
    • 正在创建新创建类型的变量
  • 类型v_sc_TYPE是v_closes_sc%类型索引的表,由二进制_整数表示;
    • 正在使用以前为表创建模板的集合(记录)创建新类型。该表将有一列ID
  • sc_阵列v_sc_类型;
    • 正在创建一个新变量来保存新表变量

    • 记录不是集合,因此您的解释有点混乱。(您可能已经看过了:

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

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

      看看你说的话:

      以下是我认为在这里要宣布的内容:

      TYPE array_rec_type IS RECORD (gla_sub tblName.id%type);
      
      这是一条记录,而不是一个集合。在本例中,它有一个名为
      gla_sub
      的字段,实际上是使用
      tblName
      表中
      id
      列的数据类型来声明的。使用
      %type
      意味着,在某种程度上,您不需要知道数据类型实际上是什么,也可能不需要知道如果代码发生更改,则必须更改代码(例如,如果
      varchar2
      列的大小增加)

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

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

      TYPE v_sc_type is TABLE OF array_rec_type INDEX BY BINARY_INTEGER;
      
      正确-正在创建刚声明的表类型的新变量



      拥有一个带有单个字段的记录类型似乎有点毫无意义,因为您可以拥有一个基于表列数据类型的集合。但是,您现有的代码将期望这种结构,因此更改它并不是一件小事。

      记录不是一个集合,因此您的解释有点混乱。(您可能已经看过了:

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

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

      看看你说的话:

      以下是我认为在这里要宣布的内容:

      TYPE array_rec_type IS RECORD (gla_sub tblName.id%type);
      
      这是一条记录,而不是一个集合。在本例中,它有一个名为
      gla_sub
      的字段,实际上是使用
      tblName
      表中
      id
      列的数据类型来声明的。使用
      %type
      意味着,在某种程度上,您不需要知道数据类型实际上是什么,也可能不需要知道如果代码发生更改,则必须更改代码(例如,如果
      varchar2
      列的大小增加)

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

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

      TYPE v_sc_type is TABLE OF array_rec_type INDEX BY BINARY_INTEGER;
      
      正确-正在创建刚声明的表类型的新变量



      拥有一个带有单个字段的记录类型似乎有点毫无意义,因为您可以拥有一个基于表列数据类型的集合。但是,您现有的代码将需要这种结构,因此更改它并不简单。

      感谢您提供的详细答案。感谢您提供的详细答案。