最近在写perl程序进行数据的采集,perl教程在网上少的可怜呐,至少我找到的资料是很少的。在连接数据库方面下面这个博客写的还是很清晰的,所以就转过来了。

DBI和DBD的不同关系模型:

##########################################################################

可移植的DBI方法:

connect 建立到一个数据库服务器的连接

disconnect 断开数据库服务器的连接

prepare 准备执行一个SQL语句

execute 执行准备好的语句

do 准备并执行一个SQL语句

quote 加引号于要插入的字符串或BLOB值

fetchrow_array 作为一个字段数组取出下一行

fetchrow_arrayref 作为一个字段的引用数组取出下一行

fetchrow_hashref 作为一个哈希表的引用取出下一行

fetchall_arrayref 作为一个字段数组取出所有数据

finish 完成一条语句并且让系统释放资源

rows 返回受影响的行数

data_sources 返回可在localhost上得到的数据库的数组

ChopBlanks 控制fetchrow_*方法是否剥去空格

NUM_OF_PARAMS 在准备的语句中的占位(placeholder-参数)的数目

NULLABLE 其列可以是NULL

trace 执行调试跟踪

##########################################################################

$dbh 数据库句柄

$sth 语句句柄

$rc 返回代码(经常是一个状态)

$rv 返回值(经常是一个行数)

##########################################################################

①connect($data_source, $username, $password)

使用connect方法使得一个数据库连接到数据源。$data_source值应该以DBI:driver_name:开始。以DBD::mysql驱动程序使用connect的例子:

$dbh = DBI->connect("DBI:mysql:$database", $user, $password);

$dbh = DBI->connect("DBI:mysql:$database:$hostname",

$user, $password);

$dbh = DBI->connect("DBI:mysql:$database:$hostname:$port",

$user, $password);

②disconnect

disconnect方法从数据库断开数据库句柄。它一般就在你从程序退出之前被调用。范例:

$rc = $dbh->disconnect;

prepare($statement)

准备一条由数据库引擎执行的SQL语句并且返回语句句柄($sth),你可以使用它调用execute方法。一般地你借助于prepare和execute来处理SELECT语句(和类SELECT语句,例如SHOW、DESCRIBE和EXPLAIN)。范例:

$sth = $dbh->prepare($statement)

or die "Can't prepare $statement: $dbh->errstr/n";

③execute

execute方法执行一个准备好的语句。对非SELECT语句,execute返回受影响的行数。如果没有行受影响,execute返回"0E0",Perl将它视作零而不是真。对于SELECT语句,execute只是在数据库中启动SQL查询;你需要使用在下面描述的fetch_*方法之一检索数据。范例:

$rv = $sth->execute

or die "can't execute the query: $sth->errstr;

④do($statement)

do方法准备并且执行一条SQL语句并且返回受影响的行数。如果没有行受到影响,do返回"0E0",Perl将它视为零而不是真。这个方法通常用于事先无法准备好(由于驱动程序的限制)或不需要执行多次(插入、删除等等)的非SELECT语句。范例:

$rv = $dbh->do($statement)

or die "Can't execute $statement: $dbh- >errstr/n";

⑤quote($string)

quote方法被用来“转义”包含在string中的任何特殊字符并增加所需的外部的引号。范例:

$sql = $dbh->quote($string)

⑥fetchrow_array

这个方法取下一行数据并且作为一个字段值数组返回它。范例:

while(@row = $sth->fetchrow_array) {

print qw($row[0]/t$row[1]/t$row[2]/n);

}

⑦fetchrow_arrayref

这个方法取下一行数据并且作为一个对一个字段值数组的引用返回它。范例:

while($row_ref = $sth->fetchrow_arrayref) {

print qw($row_ref->[0]/t$row_ref->[1]/t$row_ref->[2]/n);

}

⑧fetchrow_hashref

这个方法取一行数据并且返回包含字段名/值对的一个哈希表的一个引用。这个方法不如使用上述数组引用那样有效。范例:

while($hash_ref = $sth->fetchrow_hashref) {

print qw($hash_ref->{firstname}/t$hash_ref->{lastname}/t/

$hash_ref- > title}/n);

}

⑨fetchall_arrayref

这个方法被用来获得从SQL语句被返回的所有数据(行)。它返回一个数组的引用,该数组包含对每行的数组的引用。你用一个嵌套循环来存取或打印数据。范例:

my $table = $sth->fetchall_arrayref

or die "$sth->errstr/n";

my($i, $j);

for $i ( 0 .. $#{$table} ) {

for $j ( 0 .. $#{$table->[$i]} ) {

print "$table->[$i][$j]/t";

}

print "/n";

}

⑩finish

便名没有更多的数据将从这个语句句柄取出。你调用这个方法释放语句句柄和任何与它相关的系统资源。范例:

$rc = $sth->finish;

⑪rows

返回由最后一条命令改变(更新、删除等)的行数。这通常用在非SELECT的execute语句之后。范例:

$rv = $sth->rows;

⑫NULLABLE

返回一个对一个布尔值数组的引用;对数组的每个成员,一个TRUE值表示该列可以包含NULL值。范例:

$null_possible = $sth->{NULLABLE};

⑬NUM_OF_FIELDS

这个属性表明由一条SELECT或SHOW FIELDS语句返回的字段数目。你可以用它检查一条语句是否返回了结果:一个零值表明一个象INSERT、DELETE或UPDATE的非SELECT语句。范例:

$nr_of_fields = $sth->{NUM_OF_FIELDS};

⑭data_sources($driver_name)

这个方法返回一个数组,它包含在主机'localhost'上的MySQL服务器可得到的数据库名。范例:

@dbs = DBI->data_sources("mysql");

⑮ChopBlanks

这个属性确定fetchrow_*方法是否将去掉返回值的头和尾的空白。范例:

$sth->{'ChopBlanks'} =1;

trace($trace_level)

⑯trace($trace_level, $trace_filename)

trace方法开启或关闭跟踪。当作为一个DBI类方法调用时,它影响对所有句柄的跟踪。当作为一个数据库或语句句柄方法调用时,它影响对给定句柄的跟踪(和句柄的未来子孙)。设置$trace_level为2以提供详细的踪迹信息,设置$trace_level为0以关闭跟踪。踪迹输出缺省地输出到标准错误输出。如果指定$trace_filename,文件以添加模式打开并且所有跟踪的句柄的手被写入该文件。范例:

DBI->trace(2); # trace everything

DBI->trace(2,"/tmp/dbi.out"); # trace everything to /tmp/dbi.out

$dth->trace(2); # trace this database handle

$sth->trace(2); # trace this statement handle

你也可以通过设置DBI_TRACE环境变量开启DBI跟踪。将它设置为等价于调用DBI->(value)的数字值,将它设置为等价于调用DBI->(2,value)的路径名。

以上是原文内容。

-----------------------------------------------------------------------------

看了一上午perl,然后用了一下午的时间写了下面的采集(用的时间比较多,呵呵),代码没有抽象,高手轻拍。这个采集百万数据从informix到oracle不到10秒钟。

#!/usr/bin/perlusestrict;useDBI;useTime::localtime;useData::Dumper;useTime::Local;useNet::FTP;my($para);if(@ARGV!=1){$para=2;print"\$para = $para\n";

}else{$para=$ARGV[0];print"\$para = $para\n";

}if($para<2){print"请输入大于等于2的数字!!!\n";exit;

}my$npmdb_dbh=DBI->connect("DBI:ODBC:npmdb","informix","*******",{RaiseError=>0,PrintError=>0});my$gisdb_dbh=DBI->connect("DBI:Oracle:gisdb","gis","*******",{RaiseError=>1,AutoCommit=>0});if(!$npmdb_dbh||!$gisdb_dbh)

{print"数据库联接失败   \n";

}else{$npmdb_dbh->do("set isolation to dirty read");my$sel_sql="select a.first_result,a.ne_id,

NVL(CSTRAFFIC_CONV11,0),

NVL(CSTRAFFIC_CONV22,0),

NVL(CSTRAFFIC_CONV55,0),

NVL(TSNBRASSNBRUUL,0),

NVL(TSNBRASSNBRUDL,0),

NVL(BRUUL,0),

NVL(BRUDL,0),

NVL(TDDMAXTCP,0),

NVL(TDDMEANTCP,0),

NVL(NBRERRBLOCKSRECEIVEDCS_CONV55,0),

NVL(NBRBLOCKSRECEIVEDCS_CONV55,0),

NVL(NBRERRBLOCKSRECEIVEDPS,0),

NVL(NBRBLOCKSRECEIVEDPS,0),

NVL(SUCCMACDESTAB,0),

NVL(SUCCRBESTAB,0),

NVL(ATTMACDESTAB,0),

NVL(ATTRBESTAB,0),

NVL(a.ATTRABASSIGNESTABCS_CONV11,0)+NVL(a.ATTRABASSIGNESTABCS_CONV22,0),

NVL(a.SUCCRABASSIGNESTABCS_CONV11,0)+NVL(a.SUCCRABASSIGNESTABCS_CONV22,0),

NVL(a.ATTCONNESTAB_1,0)+NVL(a.ATTCONNESTAB_6,0),

NVL(a.SUCCCONNESTAB_1,0)+NVL(a.SUCCCONNESTAB_6,0) ,

round(NVL(SFB_DIVFLOAT_1(NVL(a.SUCCCONNESTAB_1,0)+NVL(a.SUCCCONNESTAB_6,0),NVL(a.ATTCONNESTAB_1,0)+NVL(a.ATTCONNESTAB_6,0),0,0)*SFB_DIVFLOAT_1(NVL(a.SUCCRABASSIGNESTABCS_CONV11,0)+NVL(a.SUCCRABASSIGNESTABCS_CONV22,0),NVL(a.ATTRABASSIGNESTABCS_CONV11,0)+NVL(a.ATTRABASSIGNESTABCS_CONV22,0),0,0)*100,0),2),

NVL(a.ATTRABASSIGNESTABCS_CONV55,0),

NVL(a.SUCCRABASSIGNESTABCS_CONV55,0),

round(NVL(SFB_DIVFLOAT_1(NVL(a.SUCCCONNESTAB_1,0)+NVL(a.SUCCCONNESTAB_6,0),NVL(a.ATTCONNESTAB_1,0)+NVL(a.ATTCONNESTAB_6,0),0,0)*SFB_DIVFLOAT_1(NVL(a.SUCCRABASSIGNESTABCS_CONV55,0),NVL(a.ATTRABASSIGNESTABCS_CONV55,0),0,0)*100,0),2),

NVL(a.ATTCONNESTAB,0),

NVL(a.SUCCCONNESTAB,0),

NVL(a.ATTRABASSIGNESTABPS,0),

NVL(a.SUCCRABASSIGNESTABPS,0),

round(NVL(SFB_DIVFLOAT_1(a.SUCCRABASSIGNESTABPS,a.ATTRABASSIGNESTABPS,0,0),0)*NVL(SFB_DIVFLOAT_1(a.SUCCCONNESTAB,a.ATTCONNESTAB,0,0),0)*100,2),

NVL(a.NBRRNCRELCSRAB_CONV11,0)+NVL(a.NBRRNCRELCSRAB_CONV22,0),

NVL(a.NBRRABCSRELIUCONN_CONV11,0)+NVL(a.NBRRABCSRELIUCONN_CONV22,0),

round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELCSRAB_CONV11,0)+NVL(a.NBRRNCRELCSRAB_CONV22,0)+NVL(a.NBRRABCSRELIUCONN_CONV11,0)+NVL(a.NBRRABCSRELIUCONN_CONV22,0),NVL(a.SUCCRABASSIGNESTABCS_CONV11,0)+NVL(a.SUCCRABASSIGNESTABCS_CONV22,0),0,0)*100,2),

NVL(a.NBRRNCRELCSRAB_CONV55,0),

NVL(a.NBRRABCSRELIUCONN_CONV55,0),

round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELCSRAB_CONV55,0)+NVL(a.NBRRABCSRELIUCONN_CONV55,0),NVL(SUCCRABASSIGNESTABCS_CONV55,0),0,0)*100,2),

NVL(a.NBRRNCRELPSRAB,0)-NVL(a.REL_REQ_PS_16,0)-NVL(a.REL_REQ_PS_40,0),

NVL(a.NBRRABPSRELIUCONN,0),

round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELPSRAB,0)+NVL(a.NBRRABPSRELIUCONN,0)-NVL(a.REL_REQ_PS_16,0)-NVL(a.REL_REQ_PS_40,0)- NVL(a.RAB_PS_REL_IU_CONN_16,0)-NVL(a.RAB_PS_REL_IU_CONN_40,0),a.SUCCRABASSIGNESTABPS,0,0)*100,2),

NVL(a.NBRBLOCKSRECEIVEDCS_CONV,0),

NVL(a.NBRERRBLOCKSRECEIVEDCS,0),

round(NVL(SFB_DIVFLOAT_1(a.NBRERRBLOCKSRECEIVEDCS_CONV55,a.NBRBLOCKSRECEIVEDCS_CONV55,0,0)*100,0),2),

round(NVL(SFB_DIVFLOAT_1(a.NBRERRBLOCKSRECEIVEDPS,a.NBRBLOCKSRECEIVEDPS,0,0)*100,0),2),

NVL(b.ATTOUTCS,0),

NVL(b.FAILOUTCS,0),

round(SFB_DIVFLOAT_1(NVL(b.ATTOUTCS,0)-NVL(b.FAILOUTCS,0),NVL(b.ATTOUTCS,0),0,0)*100,2),

NVL(b.ATTOUTPSUTRAN,0),

NVL(b.FAILOUTPSUTRAN,0),

round(SFB_DIVFLOAT_1(NVL(b.ATTOUTPSUTRAN,0)-NVL(b.FAILOUTPSUTRAN,0),NVL(b.ATTOUTPSUTRAN,0),0,0)*100,2)

from tpc_utrancell_ne a ,TPC_UTRANCELL_HO_NE b,TPC_UTRANCELL_HSPA_NE c

where  a.first_result =  current year to hour - $para units hour ||':00:00'

and a.first_result = b.first_result

and a.first_result = c.first_result

and a.ne_id = b.ne_id

and a.ne_id = c.ne_id";print"$sel_sql\n";my$rsite=$npmdb_dbh->prepare($sel_sql);$rsite->execute();my$ref_data=$rsite->fetchall_arrayref();$rsite->finish;$gisdb_dbh->do("delete from BTS_PM_TD where first_result <= sysdate - 74/24");$gisdb_dbh->do("delete from BTS_PM_TD where first_result = to_date(to_char((sysdate - $para/24),'YYYY-MM-DD HH24'),'SYYYY-MM-DD HH24:MI:SS')");my$MM=0;foreachmy$row(@$ref_data)

{my@data=@$row;my$dataLen=@data;my$gisInc="insert into BTS_PM_TD

values (to_date('$data[0]','SYYYY-MM-DD HH24:MI:SS'),$data[1],";for(my$HH=2;$HH

}$gisInc=substr($gisInc,0,length($gisInc)-1);$gisInc=$gisInc.")";#print"$gisInc   \n";

#first_result, ne_id, cstraffic_conv11, cstraffic_conv22, cstraffic_conv55, tsnbrassnbruul, tsnbrassnbrudl, bruul, brudl, tddmaxtcp, tddmeantcp, nbrerrblocksreceivedcs_conv55, nbrblocksreceivedcs_conv55, nbrerrblocksreceivedps, nbrblocksreceivedps, succmacdestab, succrbestab, attmacdestab, attrbestab$rsite=$gisdb_dbh->do($gisInc);$MM++;print"$MM\n";

}$gisdb_dbh->do("commit");

}$npmdb_dbh->disconnect();$gisdb_dbh->disconnect();exit(0);

perl dbi mysql 参数_perl DBI 总结相关推荐

  1. perl dbi mysql 参数_perl dbi mysql-值精度 -问答-阿里云开发者社区-阿里云

    user @ host:〜# mysql -V -mysql Ver 14.14 Distrib 5.7.25-28,用于debian-linux-gnu(x86_64),使用在debian-9,9下 ...

  2. perl dbi mysql 参数_Perl数据库DBI接口简介【转载】

    本文转载自:http://blog.csdn.net/like_zhz/article/details/5441946 ######################################## ...

  3. mysql5.6.24安装perl,linux下perl操作MySQL数据库(需要安装DBI)

    这篇文章主要为大家详细介绍了linux下perl操作MySQL数据库(需要安装DBI),具有一定的参考价值,可以用来参考一下. 感兴趣的小伙伴,下面一起跟随512笔记的小编小韵来看看吧!DBI安装:D ...

  4. perl dbi mysql windows_PERL与MySQL(DBI接口)

    PERL与MySQL(DBI接口)推荐查看本文HTML版本 通用DBI方法 connect 建立与一个数据库服务器的连接 prepare 获取准备执行的SQL语句 do 准备并执行一个SQL语句 di ...

  5. dbd mysql dbi_MySQL的DBI/DBD简明安装手册

    任何相关的软件包可从http://mysql.com/download_perl.html下载.0WA ^r |0 建议您首先安装data-dumper-?.??.tar.gz:(?.??是版本号,现 ...

  6. cgi mysql数据库_Perl CGI中操作Mysql数据库

    一. 安装DBI模块 步骤1: 从TOOLS栏目中下载DBI.zip,下载完后用winzip解开到一个temp目录,共有三个文件: Readme DBI.ppd DBI.tar.g 一. 安装DBI模 ...

  7. perl dbd mysql 5.7_perl-DBD-MySQL 无法安装

    问题描述: 在使用innobackupex 中出现了错误 -bash-4.1$ innobackupex --defaults-file=./my_3304.cnf --user=xtrabk --p ...

  8. perl mysql 数据推拉_用perl 从mysql取出数据做统计分析代码

    为完成老大的要求,我写了一个代码完成这个工作.现在记录在博客上,跟大家分享一下.脚本水平很差,((o(´∀`)o)). 要求如下: 1.数据库mydata1中有个sms_info表,表中记录格式如下: ...

  9. perl mysql 数据推拉_MySQL_Perl操作mysql数据库的方法,Perl对Mysql的操作。 一、标准 - phpStudy...

    Perl对Mysql的操作. 一.标准操作 1.连接.关闭 my $dbh = DBI->connect("DBI:mysql:database=DBname;host=localho ...

最新文章

  1. 分布式CAP中情侣的纠缠故事,真是剪不断 理还乱!
  2. 解除被DenyHosts锁定的IP地址
  3. 聚焦实战,架构升级!
  4. 第二章 centos安装maven
  5. 国防科大登顶SQuAD 2.0排行榜,机器阅读也要“不知为不知”
  6. linux下的chromedriver驱动器配置实例(含代码)
  7. Android input监控耳机插入demo
  8. ROS:激光雷达+laser_scan_matcher 运行gmapping
  9. ORACLE Primavera P6 / Unifier 19.12 免费虚拟机
  10. windows下,本地硬盘搜索工具everything。适合windows下搜索文件名。
  11. 从招聘信息看-数据分析师(数据分析报告)
  12. Springboot项目调用阿里云语音服务案例【真实有用】
  13. 六年级计算机课件,六年级信息技术上册课件.ppt
  14. BUUCTF刷题记录
  15. [渝粤教育] 西南科技大学 外国文学 在线考试复习资料
  16. python程序员面试宝典:12个Python程序员面试必备问题与答案
  17. 详讲全排列算法,及解决数字搭积木问题
  18. Java基础练习--猜数字游戏
  19. CSS-精灵图片的使用(从一张图片中截图指定位置图标)
  20. mysql第二天无法连接_MySQL第二天早上第一次连接超时报错,解决方法com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:...

热门文章

  1. vivado创建项目时找不到boards(ZCU102)的两种解决方案
  2. 机械学生为什么学习C++
  3. python的选择结构教学设计_python选择结构教学设计
  4. 流量回放开源代码Java_流量回放原理
  5. 简述蒙代尔政策配合说的主要内容
  6. Android 获取联系人手机号码、姓名、地址、公司、邮箱、生日
  7. Python学习之路-字典dict常用方法
  8. 24、高级工具--程序锁原理
  9. Docker学习视频笔记【编程不良人】
  10. 浪潮8路服务器型号,云计算需要大服务器 浪潮8路产品揭秘