利用存储过程对excel的批量操作

来源:互联网 发布:植物学专业知乎 编辑:程序博客网 时间:2024/05/23 07:25

昨天帮助同事遇到一个问题,有两张excel表A和B,其中的字段是相同的,要做这样的操作,用两张表中的nsrsbh字段进行关联,将A表中的字段qrbz插入到B表中的相应位置,起初想到的是利用excel的自带函数VLOOKUP解决这个问题,但是在尝试之后发现并不好用,达不到实际的效果,也许是本人的excel函数水平低端。

  听到这个需求,从一开始就有想用sql的想法,但是表的字段有二十多个,导入过程比较麻烦,为了避开导入,就又选择了用office自带的acess,access可以直接将excel作为数据表导入,而且可以默认的将表格的第一行检索为字段名,顿时欣喜若狂,但最后依然是失败告终,acess最后只能做到将两张表的内容合成一张表,既将A,B两张表的qrbz取出来和在一张表上,但是是作为两列存在。

最后还是选择了将两张表导入plsql中,但是又发现了新的问题,一条update语句是无法完成的(用update是因为A表中的有些数据已经手工加到B表中了),就这样用到了存储过程去尝试。


create or replace procedure chaxun
is

nb VARCHAR(20);
sql_query VARCHAR(10000);


CURSOR nsrsbh IS select  SELECT_331.AA as sbh from SELECT_331,SELECT_ALL WHERE SELECT_ALL.AA = SELECT_331.AA;
tabname_row nsrsbh%rowtype;


begin

 FOR tabname_row IN nsrsbh
 LOOP 
 
          nb:=tabname_row.sbh;       
 
          sql_query:='update SELECT_ALL m set m.a=(select n.a from SELECT_331 n where n.aa='''||nb||''') where m.aa='''||nb||'''' ; 
          EXECUTE IMMEDIATE sql_query;
  END LOOP;  
 commit;
end;


-----成功实现了需求.


这段存储是参照以前写过的一个定时提取数据的存储改的,在这里很感谢赵哥传来的备份,之前辛苦自学好不容易写出来的几句代码也没拷贝下来,现在想用又不会了,这也是我 决定以后坚持写博客的原因了,每次做完新东西以后随手记下来,日后再用也就方便了。


这是第一次尝试将excel表打入plsql进行操作,之前有过想法,但是没有做过,以后会更多的去尝试这种方法,虽然现在我也说不清原因,但总隐隐觉得会简便很多繁杂的手工操作,excel的函数不如sql+oracle函数用起来灵活,而且oracle的函数是相当全面的。

今后我 会一直在博客里更新关于数据表的操作的一些便捷方法,因为工作需求,也搞不了多高大上的东西,最常做的莫过于数据和表格的操作,手工的复制粘贴确实是一种身体和心灵的折磨,且准确程度在眼睛看花的时候根本没法保证。

0 0
原创粉丝点击