在数据库中,嵌套表是一种以不确定的顺序存储不确定数量的行的列类型。当从数据库获取嵌套表的值到PL/SQL嵌套表变量中,PL/SQL给行赋予从1开始的连续的索引。使用索引可以访问嵌套表变量中的单独的行。
|
variable_name(index) |
当从数据库获取并存储嵌套表的时候,嵌套表的索引和行的顺序可能不会保持不变。
当增加或删除元素的时候,嵌套表变量占用的内存空间也会增加和减少。
一个未初始化的嵌套表是一个NULL集合。
|
DECLARE TYPE Roster IS TABLE OF VARCHAR2(15); -- 嵌套表类型 --使用构造器初始化嵌套表变量 names Roster := Roster('AAAA', 'BBBB', 'CCCC', 'DDDD'); PROCEDURE print_names (heading VARCHAR2) IS BEGIN DBMS_OUTPUT.PUT_LINE(heading); FOR i IN names.FIRST .. names.LAST LOOP -- 循环所有元素 DBMS_OUTPUT.PUT_LINE(names(i)); END LOOP; DBMS_OUTPUT.PUT_LINE('---'); END;
BEGIN print_names('第1组:');
names(3) := 'EEEE'; -- 改变元素的值 print_names('第2组:');
names := Roster('FFFF', 'GGGG'); -- 改变整个嵌套表 print_names('第3组:');
END;
|
|
--独立的存储类型的嵌套表 CREATE OR REPLACE TYPE nt_type IS TABLE OF NUMBER; / CREATE OR REPLACE PROCEDURE print_nt (nt nt_type) IS i NUMBER; BEGIN i := nt.FIRST;
IF i IS NULL THEN DBMS_OUTPUT.PUT_LINE('nt为empty'); ELSE WHILE i IS NOT NULL LOOP DBMS_OUTPUT.PUT('nt.(' || i || ') = '); print(nt(i)); i := nt.NEXT(i); END LOOP; END IF;
DBMS_OUTPUT.PUT_LINE('---'); END print_nt; / DECLARE nt nt_type := nt_type(); -- 嵌套表变量初始化为empty BEGIN print_nt(nt); nt := nt_type(90, 9, 29, 58); print_nt(nt);
END;
|
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/17013648/viewspace-1107986/ ,如需转载,请注明出处,否则将追究法律责任。