数组:(下标从1开始)是变长数组,是在最大长度下变长。定义长度为10,可以只用1个,后续通过extend方法变长。但不能超过10个。
1、count:表示该数组实际包含的元素个数
2、limit:表示该数组可以包含的元素的最大个数
3、extend/extend(2,4):表示扩展该变长数组,该数组长度增加1/表示在集合中追加第4个元素的2个副本。
declare
type varray_type is VARRAY(10) of varchar2(20)/table_name.clomun%type;
v_array varray_type := varray_type('男','女','未知');/v_array varray_type := varray_type();
v_count integer:=0;
for i in v_list loop
v_count:=v_count+1;
v_array.extend;
v_array(v_count):=i;
end loop;
end;
record(记录):
基于表和基于游标的记录
v_record_table table_name%rowtype;--基于表
cursor test_cur is
select col1,col2,col3 from table_name where 1=1;--定义cursor
v_cursor_rec test_cur%rowtype;--基于游标的记录。(如果一张表中的字段很多,而我只需要少量字段是可以通过这个方式)
type type_name is record
(
field_name1 datatype1[not null][:=default expression],
field_name2 datatype2[not null][:=default expression],
field_name3 datatype3[not null][:=default expression]
);
record_name typt_name;--用户自定义record.
用户自己定义的record不能直接赋值。如:record_name1:=record_name2.(这时record_name1和record_name2必须是同一个type_name.否则即使他们有相同的结构也不行。)
基于表和基于游标的record_name可以赋值给用户自定义的record只要他们的结构相同就可以了。
嵌套记录:
type name_type is record(first_name varchar2(15),last_name varchar2(10));
type person_type is record(name name_type,street varchar2(50),city varcha2(25));
v_person_rec person_type;--嵌套记录
v_person_rec.name.first_name:='张';
v_person_rec.name.last_name:='学坏';
v_person_rec.street:='';
v_person_rec.city:=''上海;
记录集合:
type name_type is table of table_name/cur_name%rowtype index by binary_integer;
type name_type is table of varchar(10) index by pls_integer;
type name_type is table of number index by pls_integer;
v_name_tab name_type;