存储过程的导入List<Object>集合

来源:互联网 发布:盛世传奇翅膀进阶数据 编辑:程序博客网 时间:2024/05/18 03:07

这个存储过程在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;

原创粉丝点击