Oracle存储过程-自定义数据类型,集合,遍历取值
摘要 Oracle存储过程,自定义数据类型,集合,遍历取值
0.前言
在Oracle的存储过程中,可能会遇到数据处理,假如我们目前的功能在一个Packages中
Packages封装了多个不同功能的Procedure,我们在一个Procedure里面进行统计
在另外一个Procedure进行计算 这就需要一个存放结果集的地方
以前的解决方案是:建立了一个临时表,数据统计出来后,放入临时表中
在另外一个Procedure中取出来数据,再进行计算 这样需要读写操作 浪费性能
我们可以使用Oracle的自定义数据类型去创建集合,进行操作
1.Packages
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | create or replace package test_lu is -- Author : LUJIANING -- Created : 2014-3-12 11:27:34 -- Purpose : -- Public type declarations procedure test1; procedure test2; procedure test3; end test_lu; |
2.Packages bodies
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | create or replace package body test_lu is ---创建一个自定义数据类型 TYPE c_user IS RECORD ( id number, name varchar2(30) ); ---根据自定义数据类型创建一个集合 TYPE c_user_array IS TABLE OF c_user INDEX BY BINARY_INTEGER; ---集合对象 user_array c_user_array; ---数据对象 user c_user; ---计数器 v_counter number; procedure test1 is begin user .id:=1; user . name := 'luu' ; user_array( user .id):= user ; user .id:=2; user . name := 'lii' ; user_array( user .id):= user ; end ; procedure test2 is begin for v_counter in 1..user_array. count loop DBMS_OUTPUT.put_line(user_array(v_counter).id|| '...' ||user_array(v_counter). name ); end loop; end ; procedure test3 is begin test1; test2; end ; end test_lu; |
3.输出结果
1 2 | 1...luu 2...lii |