如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
例1:批量查询部门号为"10"号的并把它们打印出来.DECLARETYPEemp_table_typeISTABLEOFmy_emp%ROWTYPEINDEXBYBINARY_INTEGER;v_emp_tableemp_table_type;BEGINSELECT*BULKCOLLECTINTOv_emp_tableFROMmy_empWHEREdeptno=&deptno;FORiIN1..v_emp_table.COUNTLOOPdbms_output.put_line('EMPLOYEE_INFO:'||v_emp_table(i).ename||','||v_emp_table(i).job||','||v_emp_table(i).hiredate);ENDLOOP;END;说明部分:1.DECLARE说明以下你要声明的部分2.Type声明是类型emp_table_type类型的名字3.ISTABLEOF指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型,my_emp指出在哪个表上(存在的表)%ROWTYPE指在表上的行的数据类型.4.INDEXBYBINARY_INTEGER指索引组织类型5.v_emp_table定义一个变量来存储集合数据类型6.BULKCOLLECTINTO指是一个成批聚合类型,简单的来说,它可以存储一个多行多列存储类型,into后面指定从哪里来,7.v_emp_table.COUNT用来v_emp_table里面的数量8.(i)表示下标号例2:批量更新部门号为"10"的员工工资DECLARETYPEename_table_typeISTABLEOFmy_emp.ename%TYPE;TYPEsal_table_typeISTABLEOFmy_emp.sal%TYPE;v_ename_tableename_table_type;v_sal_tablesal_table_type;BEGINUPDATEmy_empSETsal=sal*1.20WHEREdeptno=&deptnoRETURNINGename,salBULKCOLLECTINTOv_ename_table,v_sal_table;FORiIN1..v_ename_table.COUNTLOOPdbms_output.put_line('EMPLOYEE_INFO:'||v_ename_table(i)||','||v_sal_table(i));ENDLOOP;END;说明部分:1.%TYPE和my_emp.ename数据类型一样v_ename_tableename_table_type;2.v_sal_tablesal_table_type;定义变量来存储它们.3.RETURNING用来指定要返回的部分,BULKCOLLECTINTO成批聚合类型4.用for把它们打印出来(总结):1.实验时把setserveroutputon打开2.以上的例子的目的主要是为了提高性能.这里的性能主要指的是速度.如果综合的从整个OLTP或者OLAP系统的话就是另外一回事了,不以这里讨论.3.速度指的是批量插入,更新,删除,为什么会提高速度呢?4.提取到的数据都在内存中进行处理,因为在内存处理比较快,这是常识.5.附以下几个例子大家自己看吧.例3:批量插入CREATETABLEmy_emp(empnonumber(4),enamevarchar2(15))/DECLARETYPEempno_table_typeISTABLEOFnumber(4)INDEXBYBINARY_INTEGER;TYPEename_table_typeISTABLEOFvarchar2(20)INDEXBYBINARY_INTEGER;v_empno_tableempno_table_type;v_ename_tableename_table_type;BEGINFORiIN1..1000LOOPv_empno_table(i):=i+2000;v_ename_table(i):='NAME'||to_char(i);ENDLOOP;FORALLiIN1..v_empno_table.COUNTINSERTINTOmy_empVALUES(v_empno_table(i),v_ename_table(i));END;/例4:批量更新CREATETABLEmy_emp(empnonumber(4),enamevarchar2(15))/DECLARETYPEempno_table_typeISTABLEOFmy