oracle pl/sql 数组

Posted

技术标签:

【中文标题】oracle pl/sql 数组【英文标题】:oracle pl/sql arrays 【发布时间】:2010-08-23 07:09:30 【问题描述】:

我有一些想要存储在数组中的数字。我将如何在 oracle pl/sql 中声明数组并为其赋值??

【问题讨论】:

这些数字是不同的还是只有一个? 我有像 1,2,5,10,100 这样的数字,我想将它存储在像 array[0] = 1, array[1] = 2, ..etc 这样的数组中,毕竟我想访问它像数组[i] 【参考方案1】:

PL/SQL 中有数组类型,但我们可以使用表自己创建这些类型

declare 
  type NumberArray is table of number index by binary_integer;
  myArray NumberArray;
begin

   myArray(0) := 1
   myArray(1) := 2 
   --or use a for loop to fill
end;

The explanation article

编辑

或者正如Adam Musch所说,如果我们知道我们正在操作的数据的数据大小,我们可以使用长度固定的VARRAYs,这是oracle环境,所以下标从1开始,

替代方案是使用VARRAY,其中数组下标从1开始,VARRAY的长度是固定的。

语义:

declare  type VarrayType is varray(size) of ElementType;

例子:

    declare
      type NumberVarray is varray(100) of NUMERIC(10);
      myArray NumberVarray;
    BEGIN
      myArray := NumberVarray(1,10,100,1000,10000);

      myArray(1) = 2;

      for i in myArray.first..myArray.last
      loop
        dbms_output.put_line('myArray(' || i || '): ' || myArray(i));
      end loop;  
    end;
END;

输出:

myArray(1) : 2
myArray(2) : 10
myArray(3) : 100
myArray(4) : 1000
myArray(5) : 10000

【讨论】:

PL/SQL中有ARRAY类型;它被称为 VARRAY,它是一个 1 索引数组,具有固定的元素上限。您使用的是关联数组,它更像是 Java HashMap,其中 BINARY_INTEGER 是键,NUMBER 是值。

以上是关于oracle pl/sql 数组的主要内容,如果未能解决你的问题,请参考以下文章

Oracle PL/SQL 数组的索引是从 0 还是从 1?

Oracle PL/SQL:如何使用可变数组作为输出参数执行过程?

Oracle PL SQL 过程需要修改以接受具有所有类型字符的数组并拆分

Oracle_PL/SQL 集合

Oracle CREATE TYPE 和 PL/SQL

Oracle pl/sql 从物理目录中读取文件的内容