codecamp

PL / SQL数组

PL / SQL程序设计语言提供了一种数据结构被称为VARRAY,其可以存储相同类型的元素的一个固定大小的连续集合。一个VARRAY用于存储数据的有序集合,但认为阵列为一体的相同类型的变量的集合是往往更为有用。

所有可变数组由连续存储单元。最低的地址对应于第一元件和最高地址的最后一个元素。

可变数组在PL / SQL

阵列是集合类型的数据的一部分,并且它代表可变大小的数组。我们将在后面的章节“PL / SQL集合”研究其他集合类型。

在一个VARRAY的每个元素具有与之相关联的索引。它还具有可以动态改变一个最大大小。

创建VARRAY类型

一个VARRAY类型是用CREATE TYPE语句创建。必须指定的最大大小,并存储在VARRAY元素的类型。

在架构层面创造一个VRRAY类型的基本语法是:

CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>

哪里,

  • varray_type_name是一个有效的属性名称,

  • n是VARRAY元件(最大值)的数量,

  • ELEMENT_TYPE是阵列中的元素的数据类型。

一个VARRAY的最大尺寸可以使用ALTER TYPE语句进行更改。

例如,

CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/

Type created.

对于内的PL / SQL块是创建一个VRRAY类型的基本语法:

TYPE varray_type_name IS VARRAY(n) of <element_type>

例如:

TYPE namearray IS VARRAY(5) OF VARCHAR2(10);
Type grades IS VARRAY(5) OF INTEGER;

例1

下面的程序说明了使用可变数组:

DECLARE
   type namesarray IS VARRAY(5) OF VARCHAR2(10);
   type grades IS VARRAY(5) OF INTEGER;
   names namesarray;
   marks grades;
   total integer;
BEGIN
   names := namesarray('Kavita', 'Pritam', 'Ayan', 'Rishav', 'Aziz');
   marks:= grades(98, 97, 78, 87, 92);
   total := names.count;
   dbms_output.put_line('Total '|| total || ' Students');
   FOR i in 1 .. total LOOP
      dbms_output.put_line('Student: ' || names(i) || '
      Marks: ' || marks(i));
   END LOOP;
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Total 5 Students
Student: Kavita  Marks: 98
Student: Pritam  Marks: 97
Student: Ayan  Marks: 78
Student: Rishav  Marks: 87
Student: Aziz  Marks: 92

PL/SQL procedure successfully completed.

请注意:

  • 在Oracle环境中,可变数组的起始索引始终为1。

  • 您可以初始化使用VARRAY类型,它具有相同的名称变长数组的构造方法的变长数组元素。

  • 可变数组是一维数组。

  • 当它被宣布其元素可以被引用之前,必须初始化一个变长数组是自动NULL。

例2

一个VARRAY的元素也可以是任何数据库表字段中的任何数据库表或%TYPE的ROWTYPE%。下面的例子说明了这一概念:

我们将使用存储在我们的数据库CUSTOMERS表:

Select * from customers;

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
+----+----------+-----+-----------+----------+

下面的例子利用游标 ,您将详细单独的一章学习。

DECLARE
   CURSOR c_customers is
   SELECT  name FROM customers;
   type c_list is varray (6) of customers.name%type;
   name_list c_list := c_list();
   counter integer :=0;
BEGIN
   FOR n IN c_customers LOOP
      counter := counter + 1;
      name_list.extend;
      name_list(counter)  := n.name;
      dbms_output.put_line('Customer('||counter ||'):'||name_list(counter));
   END LOOP;
END;
/

当上述代码在SQL提示符执行时,它产生了以下结果:

Customer(1): Ramesh 
Customer(2): Khilan 
Customer(3): kaushik    
Customer(4): Chaitali 
Customer(5): Hardik 
Customer(6): Komal

PL/SQL procedure successfully completed.

PL / SQL事务
PL / SQL日期和时间
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }