鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ PL/SQL數(shù)組
PL/SQL記錄
PL/SQL基本語(yǔ)法
PL/SQL集合
PL/SQL包
PL/SQL關(guān)系運(yùn)算符
PL/SQL比較運(yùn)算符
PL/SQL條件控制
PL/SQL字符串
PL/SQL算術(shù)運(yùn)算符
PL/SQL變量
PL/SQL IF-THEN-ELSIF語(yǔ)句
PL/SQL函數(shù)
PL/SQL異常
PL/SQL FOR循環(huán)語(yǔ)句
PL/SQL日期及時(shí)間
PL/SQL EXIT語(yǔ)句
PL/SQL DBMS輸出
PL/SQL過(guò)程
PL/SQL CONTINUE語(yǔ)句
PL/SQL數(shù)組
PL/SQL嵌套IF-THEN-ELSE語(yǔ)句
PL/SQL事務(wù)
PL/SQL CASE語(yǔ)句
PL/SQL IF-THEN語(yǔ)句
PL/SQL GOTO語(yǔ)句
PL/SQL運(yùn)算符優(yōu)先級(jí)
PL/SQL觸發(fā)器
PL/SQL運(yùn)算符
PL/SQL教程
PL/SQL WHILE循環(huán)語(yǔ)句
PL/SQL面向?qū)ο?/span>
PL/SQL循環(huán)
PL/SQL邏輯運(yùn)算符
PL/SQL IF-THEN-ELSE語(yǔ)句
PL/SQL數(shù)據(jù)類(lèi)型
PL/SQL環(huán)境安裝設(shè)置
PL/SQL游標(biāo)
PL/SQL基本循環(huán)語(yǔ)句
PL/SQL搜索CASE語(yǔ)句
PL/SQL常量和文字
PL/SQL嵌套循環(huán)

PL/SQL數(shù)組

PL/SQL程序設(shè)計(jì)語(yǔ)言提供叫一種叫做VARRAY的數(shù)據(jù)結(jié)構(gòu),其可存儲(chǔ)相同類(lèi)型元素的一個(gè)固定大小的連續(xù)集合。VARRAY用于存儲(chǔ)數(shù)據(jù)的有序集合,但它往往是更加有用認(rèn)為數(shù)組作為相同類(lèi)型的變量的集合。

所有可變數(shù)組由連續(xù)的存儲(chǔ)位置。最低的地址對(duì)應(yīng)于第一元素和最高地址的最后一個(gè)元素。

Varrays in PL/SQL

數(shù)組是所有集合類(lèi)型數(shù)據(jù)的一部分,并且它代表了可變大小的的陣列。我們將研究其他集合類(lèi)型在后面的“PL/SQL集合”章節(jié)。

在一個(gè)VARRAY每個(gè)元素都有與其相關(guān)聯(lián)的索引。它還具有可以動(dòng)態(tài)改變一個(gè)最大大小。

創(chuàng)建VARRAY類(lèi)型

一個(gè)VARRAY類(lèi)型是用CREATE TYPE語(yǔ)句創(chuàng)建。必須指定最大長(zhǎng)度,并存儲(chǔ)在VARRAY元素的類(lèi)型。

對(duì)于在架構(gòu)層面創(chuàng)造一個(gè)VRRAY類(lèi)型的基本語(yǔ)法:

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

這里,

  • varray_type_name 就是一個(gè)有效的屬性名

  • n是VARRAY元素(最大值)的數(shù)目

  • element_type 就是所述數(shù)組的元素的數(shù)據(jù)類(lèi)型。

VARRAY的最大長(zhǎng)度可以使用ALTER TYPE語(yǔ)句來(lái)改變。

例如,

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

Type created.

PL/SQL塊創(chuàng)建VRRAY類(lèi)型的基本語(yǔ)法:

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

下面的程序說(shuō)明了使用可變數(shù)組:

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;
/

當(dāng)上述代碼在SQL提示符執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

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.

請(qǐng)注意:

  • 在Oracle環(huán)境中,可變數(shù)組的起始索引始終為1

  • 可以初始化使用VARRAY類(lèi)型,它具有相同的名稱(chēng)變長(zhǎng)數(shù)組的構(gòu)造方法VARRAY元素

  • 可變數(shù)組是一維陣列

  • 一個(gè)VARRAY當(dāng)它被聲明自動(dòng)為NULL值,必須初始化之前,它的元素可以被引用

示例 2

VARRAY的元素也可以是任何%TYPE任何數(shù)據(jù)庫(kù)表或%ROWTYPE數(shù)據(jù)庫(kù)表的字段。下面的例子說(shuō)明了這個(gè)概念:

我們將使用存儲(chǔ)在數(shù)據(jù)庫(kù)中的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 |
+----+----------+-----+-----------+----------+

以下是使用游標(biāo)示例:

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
   上一篇:PL/SQL基本循環(huán)語(yǔ)句下一篇:PL/SQL游標(biāo)