日期:2014-05-16 浏览次数:20435 次
一、记录类型
1.显示定义
declare type t_record is record( id test.id%type, mc test.mc%type ); var_record t_record; counter number default 0; begin for row_test in (select id,mc from test) loop counter :=counter+1; var_record.id := row_test.id; var_record.mc := row_test.mc; dbms_output.put_line('var_record:'|| var_record.id || '----' || var_record.mc); dbms_output.put_line('row_test: '|| row_test.id || '----' ||row_test.mc); dbms_output.put_line('=======loop' || counter ||'times.'); end loop; exception when others then dbms_output.put_line(sqlcode ||sqlerrm); end; /?
?2.隐示定义
隐式定义记录中,我们不用描述记录的每一个域,在声明记录变量时使用%ROWTYPE命令定义与数据库表,视图,游标有相同结构的记录。
declare t_record1 test%rowtype; cursor cur_test(v_id in varchar2) is select id,mc from test where id <= v_id; t_record2 cur_test%rowtype; begin for row_test in cur_test('333') loop t_record1.id := row_test.id; t_record1.mc := row_test.id; t_record2.id := row_test.id; t_record2.mc := row_test.id; dbms_output.put_line('row_test:' || row_test.id || '----' || row_test.mc); dbms_output.put_line('t_record1:' || t_record1.id || '----' || t_record1.mc); dbms_output.put_line('t_record2:' || t_record2.id || '----' || t_record2.mc); dbms_output.put_line('=======loop' || cur_test%rowcount || 'times.'); end loop; exception when others then dbms_output.put_line(sqlcode || sqlerrm); end;
?
二、集合
? 类似C语言中的数组,在ORACLE7.3及以前的版本中只有一种集合称为PL/SQL表,这种类型的集合依然保留,就是索引(INDEX_BY)表。PL/SQL有三种类型的集合:
三种类型的集合之间的差异,包括数据绑定、稀疏性(sparsity)、数据库中的存储能力都有不相同。
Index_by表定义语法如下:
?关键字是INDEX BY BINARY_INTEGER,没有这个关键字,那么集合将是一个嵌套表。由于不存储在数据库中 element_type可以是任何合法的PL/SQL数据类型,包括:PLS/INTEGER、SIGNTYPE、和BOOLEAN。
?
嵌套表定义语法如下:
存储在一个数据库中的嵌套表并不与表中的其它数据存放在同一个数据块中,它们实际上被存放在第二个表中。
从数据库中取回的嵌套表也不保证元素的顺序。集合数据是离线存储的,所以嵌套表适合大型集合。
?
VARRAY定义语法如下:
max_size是一个整数,用于标示VARRAY集合拥有的最多元素数目。VARRAY集合的元素数量可以低于max_size,但不能超过max_size。
element_type是一维元素的数据类型,如果element_type是记录,那么这个记录只能使用标量数据字段(与嵌套标相似)。
VARRAY存储在数据库中时与表中的其他数据存放在同一个数据块中,元素的顺序保存在VARRAY中。
集合是线存储的,VARRAY很适合于小型集合。
?
嵌套表和VARRAY都能作为列存储在数据库表中,所以集合自身可以为NULL,当集合为NULL时,用户也不能引用集合中的元素。
declare cursor cur_test is select id,mc from test; type t_test1 is table of varchar2(60) index by binary_integer; type t_test2 is table of test%rowtype index by binary_integer; var_test1 t_test