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è)元素。
數(shù)組是所有集合類(lèi)型數(shù)據(jù)的一部分,并且它代表了可變大小的的陣列。我們將研究其他集合類(lèi)型在后面的“PL/SQL集合”章節(jié)。
在一個(gè)VARRAY每個(gè)元素都有與其相關(guān)聯(lián)的索引。它還具有可以動(dòng)態(tài)改變一個(gè)最大大小。
一個(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;
下面的程序說(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值,必須初始化之前,它的元素可以被引用
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)