这个存储过程在package中,以下是包中的详细代码,下面的代码包含伪代码,请结合实际进行参考
object的创建代码:
craate or repalce type tanglei_lianxi_obj is object(
-- 列名
id number,
name varchar,
.
.
.
)
tab的创建代码:
create or replace type tanglei_lianxi_tab is table of tanglei_lianxi_obj --创建TAB类型
包头:
create or replace package tanglei_lianxi is
-- Author : lei.tang
-- Created : 2017/8/9 10:36:29
-- Purpose : 存储过程的导入List<Object>集合
-- 导入List集合的存储
procedure importObjectList(pi_lianxi_tab IN tanglei_lianxi_tab, --TAB
po_flag out number, --输出标志
po_msg out varchar2 --输出信息
);
end tanglei_lianxi;
包体:
create or replace package body tanglei_lianxi is
-- 导入List集合的存储
procedure importObjectList(pi_lianxi_tab IN tanglei_lianxi_tab, --TAB
po_flag out number, --输出标志
po_msg out varchar2 --输出信息
) is
-- 定义接收对象的id
v_id number;
-- 定义接收对象
v_obj tanglei_lianxi_obj;
begin
-- 给标志和信息赋初值
po_flag := 0;
po_msg := 'OK';
--循环入参TAB
for i in 1 .. tanglei_lianxi_tab.count loop
-- 接收循环的对象
v_obj := tanglei_lianxi_tab(i);
-- 判断该对象的id是否存在; 存在-->更新,不存在-->插入
if v_obj.id is null then
-- 用序列获取id
v_id := nextVal(); -- 这里自己获取下一个序列的值
-- 插入
insert into 表名(列1,列2) values (v_obj.id,列2);
else
-- 更新
update 表名 set 列1=? where id = v_obj.id;
end if;
end loop;
-- 循环结束,提交事务
commit;
--异常处理
Exception
when others then
po_flag : = 1;
po_msg := SQLERRM;
-- 回滚
rollback;
end importObjectList;
end tanglei_lianxi;