oracle 含参带游标的存储过程

    系统中有个模块的基础数据需要导到数据库,由于数据量比较大,而且表格内容分布较凌乱。就先将数据导入临时表,然后根据临时表进行有效的检索并添加到对应的表中。今天下午写了个含有参数,带游标的存储过程。算是把这个问题给解决了。

    本人需求大致如下:现有临时表"Sheet1$",数据是直接从excel的sheet1中读取然后自定义的,所以表名比较怪异。还有两张表分别是f_template,f_content.表结构如下:


create table f_template
(
 tpl_id varchar2(20) primary key,
 tpl_name varchar2(100) ,
 work_type varchar2(10) ,
 vol_level varchar2(15) ,
 org_id varchar2(10) ,
 create_date timestamp
)

create table f_content
(
 rc_id varchar2(20) primary key,
 project_name varchar2(100),
 content varchar2(2000),
 control_measure varchar2(2500),
 is_public varchar2(10),
 tpl_id varchar2(20),
 foreign key tpl_id references to f_template(tpl_id)
)

alter table f_content
add constraint fk_content_template 
foreign key(tpl_id) references f_template(tpl_id);

 

create or replace procedure pro_insert_temp
(
 tplid in number,--风险辨识范本id
 rcid  in number,--风险辨识范本内容id
 worktype in varchar2,--风险类型
 orgid in varchar2--市局组织id
)
 as
 cur_tplid number :=tplid;--将输入参数tplid赋值给当前
 cur_rcid  number :=rcid; --将输入参数rcid赋值给当前
 tplname "Sheet1$".A%type;--风险辨识项目
 last_tplname "Sheet1$".A%type :='def';--上一风险辨识项目
 pubmark "Sheet1$".B%type;--是否公共
 projectname "Sheet1$".C%type;--辨识项目
 content "Sheet1$".D%type;--辨识内容
 measure "Sheet1$".E%type;--控制措施
 cursor c_sheet is select a,b,c,d,e from "Sheet1$";

begin
    open c_sheet ;--打开游标
    loop
    fetch c_sheet into tplname, pubmark, projectname, content, measure;--游标下移
    exit when c_sheet %notfound;--退出条件
   
   if(last_tplname='def' or last_tplname <> tplname) --判断是否同一风险辨识范本,不是则进入
  then
  cur_tplid:=cur_tplid+1;  --范本id自增长
      insert into f_template(tpl_id,tpl_name,work_type,org_id,create_date)--添加范本
      values(cur_tplid ,tplname ,worktype ,orgid,sysdate);
        last_tplname:=tplname;     
  end if; 
   
 cur_rcid:=cur_rcid+1;--范本内容id自增长
 insert into f_content(rc_id,project_name,content,control_measure,is_public,tpl_id)
 values(cur_rcid,projectname,content,measure,pubmark,cur_tplid);--添加范本内容记录

    end loop;--游标循环结束
    close c_sheet;--关闭游标
end pro_insert_temp;--存储过程结束


exec pro_insert_temp(0,0,'变电检修','3');

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值