例1: 批量 查询部门号为 "10" 号的并把它们打印出来 .
DECLARE
TYPE emp_table_type IS TABLE OF my_emp%ROWTYPE INDEX BY BINARY_INTEGER;
v_emp_table emp_table_type;
BEGIN
SELECT * BULK COLLECT INTO v_emp_table FROM my_emp WHERE deptno=&deptno;
FOR i IN 1..v_emp_table.COUNT LOOP
dbms_output.put_line('EMPLOYEE_INFO:'||v_emp_table(i).ename||
','||v_emp_table(i).job||
','||v_emp_table(i).hiredate);
END LOOP;
END;
说明部分:
1. DECLARE 说明以下你要声明的部分
2. Type 声明是类型 emp_table_typ e 类型的名字
3. IS TABLE OF 指定是一个集合的表的数组类型, 简单的来说就是一个可以存储一列多行的数据类型 , my_emp 指出在哪个表上( 存在的表 ) %ROWTYPE指在表上的行的数据类型.
4. INDEX BY BINARY_INTEGER 指索引组织类型
5. v_emp_table 定义一个变量来存储集合数据类型
6. BULK COLLECT INTO 指是一个成批聚合类型, 简单的来说 , 它可以存储一个多行多列存储类型 ,into 后面指定从哪里来 ,
7. v_emp_table.COUNT 用来 v_emp_table 里面的数量
8. (i)表示下标号
by PLS_INTEGER你可以用类似 string_index_by_number(1),也就用数字下标来访问集合中的元素,例子:
declare
TYPE number_index_by_string IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
num_collection string_index_by_number;
begin
num_collection(1) := '北京';
dbms_output.put_line(num_collection(1)); --输出为北京
end;
BY VARCHAR2(30) 你可以用类似 number_index_by_string ('name'),也就用数字下标来访问集合中的元素.
例子: declare
TYPE number_index_by_string IS TABLE OF NUMBER INDEX BY VARCHAR2(30);
num_collection number_index_by_string;
begin
num_collection('北京') := 1;
dbms_output.put_line(num_collection('北京')); --输出为1
end;