注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

lazydba

hello

 
 
 

日志

 
 

perl dbi programming - data copy  

2010-04-25 20:38:38|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
插入到mysql数据库时,可以用insert t(a,b,c,d) values(x,x,x,x), (x,x,x,x),...形式的批量语句提高速度。

字符串可以用 DBI 的 quote函数处理一下,处理转义字符。

sub do_it {
?? my $str_sql_from_oracle =
?????? "select /*+ parallel(t,4) */ a,b,c,d from tab t";

?? my $ora_conn = &get_oracle_connection("ora", "user", "password");
?? my $mysql_conn = &get_mysql_connection("ip", port, "user", "password");

?? #get result set from oracle
?? my $rs = &get_result_set($ora_conn, $str_sql_from_oracle);

?? #use batch fetch to get 100 recrods per time.
?? while ( my $rows = $rs->fetchall_arrayref(undef, 100)) {
? ?? ? #construct the batch insert statement
?????? my $str_ins_batch = "insert into tab(a, b, c, d) values ";

??? ?? my $i = 0;

?????? for my $r (@$rows) {
?????????? #quote string
?????????? my $str_q = $mysql_conn->quote($r->[0]);

?????????? if ($i == 0 ) {
????????????? $str_ins_batch = $str_ins_batch . "(" . $str_q . "," . $r->[1] . "," . $r->[2] . ",'" . $r->[3] . "')";
??????????? } else {
?????????????? $str_ins_batch = $str_ins_batch. ",(" . $str_q . "," . $r->[1] . "," . $r->[2] . ",'" . $r->[3] . "')";
??????????? }
???????????? $i = $i + 1;
???????? }
?????? my $stmt_batch = $mysql_conn->prepare($str_ins_batch);
?????? $stmt_batch->execute();
?????? $mysql_conn->commit();
?? }
?? $mysql_conn->disconnect();
?? $ora_conn->disconnect();
}
  评论这张
 
阅读(75)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017