摘要: Oracle存储过程,自定义数据类型,集合,遍历取值
0.前言
在Oracle的存储过程中,可能会遇到数据处理,假如我们目前的功能在一个Packages中
Packages封装了多个不同功能的Procedure,我们在一个Procedure里面进行统计
在另外一个Procedure进行计算 这就需要一个存放结果集的地方
以前的解决方案是:建立了一个临时表,数据统计出来后,放入临时表中
在另外一个Procedure中取出来数据,再进行计算 这样需要读写操作 浪费性能
我们可以使用Oracle的自定义数据类型去创建集合,进行操作
1.Packages
create or replace package test_lu is
-- Purpose :
-- Public type declarations
procedure test1;
procedure test2;
procedure test3;
end test_lu;
2.Packages bodies
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...luu
2...lii
0.前言
在Oracle的存储过程中,可能会遇到数据处理,假如我们目前的功能在一个Packages中
Packages封装了多个不同功能的Procedure,我们在一个Procedure里面进行统计
在另外一个Procedure进行计算 这就需要一个存放结果集的地方
以前的解决方案是:建立了一个临时表,数据统计出来后,放入临时表中
在另外一个Procedure中取出来数据,再进行计算 这样需要读写操作 浪费性能
我们可以使用Oracle的自定义数据类型去创建集合,进行操作
1.Packages
create or replace package test_lu is
-- Purpose :
-- Public type declarations
procedure test1;
procedure test2;
procedure test3;
end test_lu;
2.Packages bodies
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...luu
2...lii
转自:https://my.oschina.net/lujianing/blog/207482