nested_table.DELETE(1,3);
index_by_table.DELETE(10);
DBMS_OUTPUT.PUT_LINE('nested_table.LAST='||nested_table.LAST);
DBMS_OUTPUT.PUT_LINE('nested_table.PRIOR(2)='||nested_table.PRIOR(2));
DBMS_OUTPUT.PUT_LINE('nested_table.NEXT(2)='||nested_table.NEXT(2));
d.变长数组
TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) OF element_type [NOT NULL];
varray_name TYPE_NAME;
注:类似于嵌套表,当变长数组被声明时,自动设置为NULL。必须在引用单个元素之前,初始化变长数组。
不能对变长数组使用DELETE方法
eg:
DECLARE
CURSOR name_cur IS
SELECT last_name
FROM student
WHERE rownum<=10;
TYPE last_name_type IS VARRAY(10) OF student.last_name%TYPE;
last_name_varray last_name_type :=last_name_type();
v_counter INTEGER := 0;
BEGIN
FOR name_rec IN name_cur LOOP
v_counter := v_counter+1;
last_name_varray.EXTEND;
last_name_varray(v_counter):=name_rec.last_name;
END LOOP;
END;
e.多层集合
eg:
DECLARE
TYPE varray_type1 IS VARRAY(4) OF INTEGER;
TYPE varray_type2 IS VARRAY(3) OF varray_type1;
varray1 varray_type1 := varray_type1(2,4,6,8);
varray2 varray_type2 := varray_type2(varray1);
15.记录
a.基于表的记录 使用%ROWTYPE属性可以创建基于表和基于游标的记录
eg:
course_rec course%ROWTYPE;
BEGIN
SELECT * INTO course_rec FROM course WHERE course_no=25;
END
b.基于游标的记录
注:基于游标的记录依赖于特定的游标,不能在游标之前声明
eg:
DECLARE
CURSOR student_cur IS SELECT first_name,last_name FROM student WHERE rownum<=4;
student_rec student_cur%ROWTYPE;
c.用户定义的记录
语法如下:
TYPE type_name IS RECORD
(filed_name1 datatype1 [NOT NULL] [ := DEFAULT EXPRESSION],
filed_name2 datatype2 [NOT NULL] [ := DEFAULT EXPRESSION],
...
filed_nameN datatypeN [NOT NULL] [ := DEFAULT EXPRESSION]);
record_name TYPE_NAME;
d.记录兼容性
i>.对于用户定义的记录
eg:
DECLARE
TYPE name_type1 IS RECORD(first_name VARCHAR2(12),last_name VARCHAR2(15));
TYPE name_type2 IS RECORD(first_name VARCHAR2(12),last_name VARCHAR2(15));
name_rec1 name_type1;
name_rec2 name_type2;
解释:虽然name_type1与name_type2结构一样但是不能直接将name_rec1的值赋给name_rec2(即不可:name_rec2=name_rec1),应该通过但值赋值(即:name_rec2.first_name=name_rec1.first_name)
ii>.对于基于表与游标的记录
对于基于表与游标的记录赋予用户定义类型,只要两者具有相同的结构即可
e.嵌套记录 记录中含有记录或者集合
eg:
DECLARE
TYPE name_type IS RECORD(first_name VARCHAR2(15),last_name VARCHAR2(30));
TYPE person_type IS RECORD(name name_type,zip VARCHAR2(5));
person_