在本章中,我們將討論學習PL/SQL中的數組。 PL/SQL編程語言提供了一種稱為VARRAY的數據結構,它可以存儲相同類型的元素的固定大小順序集合。varray用於存儲有序的數據集合,但通常最好將數組視為相同類型變數的集合。
所有varray是由連續的記憶體位置組成。最低的地址對應於第一個元素,而最後一個元素的地址最高。參考以下圖示 -

數組是集合類型數據的一部分,表示可變大小的數組。 我們將在後面的“PL/SQL集合”這一章中學習其他集合類型。
varray中的每個元素都具有與之相關聯的索引。它還具有可以動態更改的容量(大小)。
創建Varray類型
使用CREATE TYPE語句創建varray類型。必須指定存儲在varray中的元素的最大容量(大小)和類型。
在模式(schema)級創建VARRAY類型的基本語法是 -
CREATE OR REPLACE TYPE varray_type_name IS VARRAY(n) of <element_type>
其中,
varray_type_name是一個有效的屬性名稱;n是varray中元素的數量(最大值);element_type是數組元素的數據類型。
可以使用ALTER TYPE語句更改變數的最大大小。
例如,
CREATE Or REPLACE TYPE namearray AS VARRAY(3) OF VARCHAR2(10);
/
在PL/SQL塊中創建VARRAY類型的基本語法是 -
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
以下程式說明了如何使用varrays -
SET SERVEROUTPUT ON SIZE 99999;
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提示符下執行時,它會產生以下結果 -

請注意 -
- 在Oracle環境中,
varrays的起始索引始終為1。 - 可以使用
varray類型的構造方法初始化varray元素,該方法與varray具有相同的名稱。 varrays是一維數組。varray在聲明時自動為NULL,並且必須在引用元素之前初始化它。
示例-2
變數的元素也可以是任何資料庫表的%ROWTYPE或任何資料庫表字段的%TYPE表來引用表示。 以下示例說明了這個概念。
將使用資料庫中存儲的CUSTOMERS表,結構和數據如下所示 -
CREATE TABLE customers
( id number(10) NOT NULL,
name varchar2(50) NOT NULL,
age number(2) NOT NULL,
address varchar2(50),
salary float(2) NOT NULL,
CONSTRAINT customers_pk PRIMARY KEY (id)
);
INSERT INTO customers (id,name,age,address,salary) VALUES(1, '羅大牛',32,'北京', 22999.00);
INSERT INTO customers (id,name,age,address,salary) VALUES(2, 'Maxsu',25,'海口', 5999.00);
INSERT INTO customers (id,name,age,address,salary) VALUES(3, 'Hinew',22,'廣州', 9800.98);
INSERT INTO customers (id,name,age,address,salary) VALUES(4, '李小路',26,'北京', 18700.00);
INSERT INTO customers (id,name,age,address,salary) VALUES(5, '張友德',28,'上海', 18999.00);
INSERT INTO customers (id,name,age,address,salary) VALUES(6, '李連定',42,'深圳', 32999.00);
以下示例使用游標引用(有關游標將在單獨的章節中詳細介紹和學習)。參考以下代碼 -
SET SERVEROUTPUT ON SIZE 99999;
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提示符下執行時,它會產生以下結果 -

上一篇:
PL/SQL字串
下一篇:
PL/SQL存儲過程
