ALL_ARGUMENTS视图中TABLE和PL / SQL TABLE之间的区别

时间:2018-01-15 13:28:46

标签: oracle stored-procedures plsql

按查询提取数据

select * from ALL_ARGUMENTS 

它将在 DATA_TYPE

中返回两种类型

1- TABLE

2- PL / SQL TABLE

我已经检查了包含过程,两种类型都以类似的方式声明。

他们之间有什么区别?

示例 - 有声明

TYPE Bom_Revision_Tbl_Type是Bom_Revision_Rec_Type的表格 - PL / SQl TABLE

OBJECT_NAME   PKG NAME     ARGUMENT_NAME     DATA_TYPE
PROCESS_BOM  BOM_BO_PUB P_BOM_REVISION_TBL  PL/SQL TABLE

TYPE inv_ebi_name_value_pair_tbl IS TABLE of inv_ebi_name_value_pair_rec - SQL TABLE

OBJECT_NAME   PKG NAME             ARGUMENT_NAME           DATA_TYPE
ID_TO_VALUE INV_EBI_ITEM_HELPER P_PK_COL_NAME_VAL_PAIRS     TABLE

1 个答案:

答案 0 :(得分:3)

three collection types in PL/SQL

您的Bom_Revision_Tbl_Typeassociative array

  

关联数组(以前称为PL / SQL表或索引表)是一组键值对。每个键都是唯一索引,用于使用语法variable_name(index)定位关联值。

它使用index by子句定义。这仍然在all_arguments中作为“PL / SQL表”报告,使用该集合类型的旧名称。

您的inv_ebi_name_value_pair_tbl类型为nested table

文档解释了它们之间的差异,以及每种类型何时合适; associative arrays

  

关联数组适用于:

     
      
  • 一个相对较小的查找表,每次调用子程序或初始化声明它的包时都可以在内存中构建

  •   
  • 将集合传入和传出数据库服务器

  •   

nested tables

  

在以下情况下,嵌套表是合适的:

     
      
  • 未设置元素数。

  •   
  • 索引值不是连续的。

  •   
  • 您必须同时删除或更新某些元素,但不能删除所有元素。

  •   
  • 嵌套表数据存储在单独的存储表中,这是一个系统生成的数据库表。访问嵌套表时,数据库将嵌套表与其存储表连接。这使得嵌套表适用于仅影响集合的某些元素的查询和更新。

  •   
  • 您将创建一个单独的查找表,主表的每一行都有多个条目,并通过连接查询访问它。

  •