“按表索引”和“按记录表索引”之间有什么区别?

时间:2011-05-14 21:30:05

标签: sql oracle plsql

我遇到过两个术语,但它们听起来是同义词。这两者有区别吗?

3 个答案:

答案 0 :(得分:6)

“索引表”是Oracle的“关联数组”术语。这些是包含可以解析(或索引)整数或字符串的元素的数组。由于在定义数组时使用了INDEX BY关键字,因此可能会调用它们。

Oracle documentation

中给出的示例的缩写
DECLARE  
  TYPE population_type IS TABLE OF NUMBER INDEX BY VARCHAR2(64);
  country_population population_type;
  howmany NUMBER;
BEGIN
  country_population('Greenland') := 100000; -- Creates new entry
  howmany := country_population('Greenland');
  ...

您可以创建包含记录的索引表,其中记录本质上是包含多个类型的结构。例如,记录通常包含与表中的行相同的类型。

再次,来自Oracle documentation

DECLARE
   TYPE EmpTabTyp IS TABLE OF employees%ROWTYPE
      INDEX BY PLS_INTEGER;
   emp_tab EmpTabTyp;
BEGIN
   /* Retrieve employee record. */
   SELECT * INTO emp_tab(100) FROM employees
     WHERE employee_id = 100;
END;

这里,emp_tab是一个索引表,由整数索引,包含员工%ROWTYPE的记录。

答案 1 :(得分:2)

我不确定你从哪里获得短语,但TABLE OFINDEX BY是集合类型声明的独立部分。 TABLE OF定义集合字段的类型,可以是数据类型(即TABLE OF NUMBER)或记录类型(即TABLE OF MY_TABLE%TYPE)。

INDEX BY指的是查找此集合的方法,几乎​​就像一个键值对。例如,我可以使用INDEX BY VARCHAR2(10),以便我可以使用文本键从集合类型中检索值。

以下是插图:

DECLARE
  TYPE my_type IS TABLE OF NUMBER INDEX BY VARCHAR2(10);
  n_my_value NUMBER;
BEGIN
  my_type ('the key') := 99;
  n_my_value := my_type ('the key');
END;
/

答案 2 :(得分:0)

按表索引是用户定义的数据类型,用于存储多个数据项。基本上这些表是不受约束的表。按表分列有两部分,这些是值字段和键字段。在值字段中,oracle服务器存储实际数据,其中在关键字段oracle服务器存储索引时,这就是为什么索引按表具有“键值”对,并且索引也是默认整数,并且这些索引在负数到正数之间。此索引字段的行为类似于主键,它不接受重复值。   通常使用表索引来提高性能或应用程序,因为这些表存储在内存区域中,这就是为什么这些表也称为内存表。 通常为了提高应用程序的性能,这些表索引都使用'二进制整数'数据类型,因此我们分两步创建。首先我们创建类型,然后我们只创建该类型的变量。

语法: -

步骤1: - 类型typename是binary_integer的数据类型(大小)索引表; 第2步: - 变量名类型名称;

更多信息>>>> http://www.oraappdata.com/2017/02/plsql-index-by-tables-or-plsql-tables-or-associative-arrays.html