Oracle存储过程-自定义数据类型,集合,遍历取值

摘要  Oracle存储过程,自定义数据类型,集合,遍历取值

目录[-]

0.前言    1.Packages 2.Packages bodies 3.输出结果

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



转载于:https://www.cnblogs.com/Bouger/p/4318322.html

你可能感兴趣的:(数据库)