集合變量的賦值
更新時(shí)間:
本文介紹了為集合變量賦值的方式。
簡(jiǎn)介
您可以通過以下方式為集合變量賦值:
調(diào)用構(gòu)造函數(shù)來創(chuàng)建集合并將其分配給集合變量。
使用賦值語句將另一個(gè)現(xiàn)有集合變量的值賦給它。
將其作為
OUT
或IN OUT
參數(shù)傳遞給子程序,然后在子程序內(nèi)賦值。僅支持變長(zhǎng)數(shù)組和嵌套表作為子程序的參數(shù)。不允許關(guān)聯(lián)數(shù)組作為子程序的參數(shù)。使用
collection(index) = value
的形式為集合變量的元素賦值。
說明
僅當(dāng)兩個(gè)集合具有相同的或是可以隱式類型轉(zhuǎn)換的元素類型時(shí),才可以將它們互相賦值。
示例
以下是一個(gè)賦值成功的示例。
DECLARE
TYPE char_col1 IS VARRAY(3) OF CHAR(5);
TYPE char_col2 IS VARRAY(3) OF CHAR(5);
TYPE int_col IS VARRAY(3) OF INT;
group1 char_col1 := char_col1('1', '2', '3');
group2 char_col2;
group3 int_col;
BEGIN
group2 := group1; -- 不同的集合類型, 但相同的元素類型
RAISE NOTICE 'group2:';
FOR i IN 1..3 LOOP
RAISE NOTICE '%', group2(i);
END LOOP;
group3 := group1; -- 不同的集合類型, 但可以隱式轉(zhuǎn)換的元素類型
RAISE NOTICE 'group3:';
FOR i IN 1..3 LOOP
RAISE NOTICE '%', group3(i);
END LOOP;
END;
顯示結(jié)果如下:
NOTICE: group2:
NOTICE: 1
NOTICE: 2
NOTICE: 3
NOTICE: group3:
NOTICE: 1
NOTICE: 2
NOTICE: 3
DO
當(dāng)隱式轉(zhuǎn)換失敗時(shí),則會(huì)在對(duì)應(yīng)的元素賦值時(shí)拋出錯(cuò)誤。以下是一個(gè)賦值失敗的示例。
DECLARE
TYPE char_col IS VARRAY(3) OF CHAR(5);
TYPE int_col IS VARRAY(3) OF INT;
group1 char_col := char_col('1', 'a'); -- 顯然, a無法轉(zhuǎn)換為int類型
group2 int_col;
BEGIN
group2 := group1;
END;
顯示結(jié)果如下:
ERROR: invalid input syntax for type integer: "a "
CONTEXT: PL/SQL function inline_code_block line 8 at assignment
您可以使用NULL將一個(gè)初始化過的變長(zhǎng)數(shù)組或嵌套表重新賦值為NULL。
DECLARE
TYPE nt_type IS TABLE OF INT;
nt nt_type; -- 初始狀態(tài)為 NULL
PROCEDURE print_status IS
BEGIN
IF nt IS NULL THEN
DBMS_OUTPUT.PUT_LINE('nt is null.');
ELSE
DBMS_OUTPUT.PUT_LINE('nt is not null.');
END IF;
END;
BEGIN
print_status;
nt = nt_type(); -- 初始化為空, 不為 NULL
print_status;
nt = NULL; -- 將其賦值為 NULL
print_status;
END;
顯示結(jié)果如下:
nt is null.
nt is not null.
nt is null.
DO
關(guān)聯(lián)數(shù)組變量永遠(yuǎn)不會(huì)為NULL,因此將NULL賦值給關(guān)聯(lián)數(shù)組變量會(huì)直接報(bào)錯(cuò)。
DECLARE
TYPE aarray_type IS TABLE OF INT INDEX BY VARCHAR(10);
aarray aarray_type := NULL; -- 賦值為 NULL
BEGIN
END;
顯示結(jié)果如下:
ERROR: can not assign NULL to associative array
CONTEXT: PL/SQL function inline_code_block line 4 during statement block local variable initialization
文檔內(nèi)容是否對(duì)您有幫助?