把oracle存储过程加到数据库,Oracle存储过程返回数据集,并将数据集插入表

-- ==================实例:Oracle存储过程返回数据集,并将数据集插入表========================

CREATE table userinfo(id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

insert into userinfo(id,name,sex,age,address) values(1,'luoyoumou','男',33,'湖南省衡阳市');

insert into userinfo(id,name,sex,age,address) values(2,'miaoxiaoming','男',32,'江西省吉安市');

insert into userinfo(id,name,sex,age,address) values(3,'hanqiguang','男',28,'江西省赣州市');

commit;

create table userinfo2 as select * from userinfo where 1=2;

-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!

CREATE OR REPLACE PROCEDURE userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)

IS

sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句

BEGIN

-- 给SQL变量赋值,其中 :i_address 是绑定变量,以提高执行效率!

sqlstr := 'SELECT Id, Name, Sex, Age, Address FROM userinfo WHERE Address = :i_address';

OPEN o_cur FOR sqlstr USING i_address; -- 给游标变量赋值

END;

create or replace procedure userinfo_proc_get

IS

--自定义数据类型

type userinfo_rec_type is record (id number(18,0), name varchar2(30), sex varchar2(10), age number(3,0), address varchar2(100));

--创建userinfo_rec_type类型的数组

type userinfo_tab_type is table of userinfo_rec_type;

--定义数组变量

userinfo_tab userinfo_tab_type;

--%rowtype 是强数据类型, 定义后数据类型与源表保持一致,其实它就是一个RECORD

type uif_tab_type is table of userinfo%rowtype;

--定义数组变量

uif_tab uif_tab_type:=uif_tab_type();

v_cnt number(10,0);

--定义返回游标

rs sys_refcursor;

begin

userinfo_proc('江西省吉安市',rs);

--将游标数据一次性加入到数组中

fetch rs bulk collect into userinfo_tab;

-- 处理要插入表的数据=====>此步骤不需要

for i in 1..userinfo_tab.count loop

uif_tab.extend;

uif_tab(i).id := userinfo_tab(i).id;

uif_tab(i).name := userinfo_tab(i).name;

uif_tab(i).sex := userinfo_tab(i).sex;

uif_tab(i).age := userinfo_tab(i).age;

uif_tab(i).address := userinfo_tab(i).address;

end loop;

--将数据批量插入表

forall i in 1..uif_tab.count

insert into userinfo2 values uif_tab(i);

close rs;

commit;

end;

exec userinfo_proc_get;

-- 验证数据是否插入成功:

select * from userinfo2;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值