perl DBI 总结
最近在写perl程序进行数据的采集,perl教程在网上少的可怜呐,至少我找到的资料是很少的。在连接数据库方面下面这个博客写的还是很清晰的,所以就转过来了。
源文地址:http://blog.csdn.net/like_zhz/article/details/5441946 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",$password); ②disconnect 以上是原文内容。 ----------------------------------------------------------------------------- ??? 看了一上午perl,然后用了一下午的时间写了下面的采集(用的时间比较多,呵呵),代码没有抽象,高手轻拍。这个采集百万数据从informix到oracle不到10秒钟。
#
!/usr/bin/perl
use ?strict; use ?DBI; use ? Time :: localtime ; use ?Data :: Dumper; use ? Time :: Local ; use ?Net :: FTP; my ?( $para ); if ( @ARGV ? != ? 1 ){ ???? ???? $para ? = ? 2 ; ???? print ? " $para?=?$paran " ; ???????? } else { ???? $para ? = ? $ARGV [ 0 ]; ???? print ? " $para?=?$paran " ; ???? } 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, ????????????????????????????????????NVL(CSTRAFFIC_CONV55, ????????????????????????????????????NVL(TSNBRASSNBRUUL, ????????????????????????????????????NVL(TSNBRASSNBRUDL, ????????????????????????????????????NVL(BRUUL, ????????????????????????????????????NVL(BRUDL, ????????????????????????????????????NVL(TDDMAXTCP, ????????????????????????????????????NVL(TDDMEANTCP, ????????????????????????????????????NVL(NBRERRBLOCKSRECEIVEDCS_CONV55, ????????????????????????????????????NVL(NBRBLOCKSRECEIVEDCS_CONV55, ????????????????????????????????????NVL(NBRERRBLOCKSRECEIVEDPS, ????????????????????????????????????NVL(NBRBLOCKSRECEIVEDPS, ????????????????????????????????????NVL(SUCCMACDESTAB, ????????????????????????????????????NVL(SUCCRBESTAB, ????????????????????????????????????NVL(ATTMACDESTAB, ????????????????????????????????????NVL(ATTRBESTAB, ????????????????????????????????????NVL(a.ATTRABASSIGNESTABCS_CONV11,0)+NVL(a.ATTRABASSIGNESTABCS_CONV22, ????????????????????????????????????NVL(a.SUCCRABASSIGNESTABCS_CONV11,0)+NVL(a.SUCCRABASSIGNESTABCS_CONV22, ????????????????????????????????????NVL(a.ATTCONNESTAB_1,0)+NVL(a.ATTCONNESTAB_6, ????????????????????????????????????NVL(a.SUCCCONNESTAB_1,0)+NVL(a.SUCCCONNESTAB_6,0)?, ????????????????????????????????????round(NVL(SFB_DIVFLOAT_1(NVL(a.SUCCCONNESTAB_1,NVL(a.ATTCONNESTAB_1,0)*SFB_DIVFLOAT_1(NVL(a.SUCCRABASSIGNESTABCS_CONV11,NVL(a.ATTRABASSIGNESTABCS_CONV11,0)*100,2), ????????????????????????????????????NVL(a.ATTRABASSIGNESTABCS_CONV55, ????????????????????????????????????NVL(a.SUCCRABASSIGNESTABCS_CONV55,0)*SFB_DIVFLOAT_1(NVL(a.SUCCRABASSIGNESTABCS_CONV55,NVL(a.ATTRABASSIGNESTABCS_CONV55, ????????????????????????????????????NVL(a.ATTCONNESTAB, ????????????????????????????????????NVL(a.SUCCCONNESTAB, ????????????????????????????????????NVL(a.ATTRABASSIGNESTABPS, ????????????????????????????????????NVL(a.SUCCRABASSIGNESTABPS, ????????????????????????????????????round(NVL(SFB_DIVFLOAT_1(a.SUCCRABASSIGNESTABPS,a.ATTRABASSIGNESTABPS,0)*NVL(SFB_DIVFLOAT_1(a.SUCCCONNESTAB,a.ATTCONNESTAB, ????????????????????????????????????NVL(a.NBRRNCRELCSRAB_CONV11,0)+NVL(a.NBRRNCRELCSRAB_CONV22, ????????????????????????????????????NVL(a.NBRRABCSRELIUCONN_CONV11,0)+NVL(a.NBRRABCSRELIUCONN_CONV22, ????????????????????????????????????round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELCSRAB_CONV11,0)+NVL(a.NBRRABCSRELIUCONN_CONV11,NVL(a.SUCCRABASSIGNESTABCS_CONV11, ????????????????????????????????????NVL(a.NBRRNCRELCSRAB_CONV55, ????????????????????????????????????NVL(a.NBRRABCSRELIUCONN_CONV55, ????????????????????????????????????round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELCSRAB_CONV55,0)+NVL(a.NBRRABCSRELIUCONN_CONV55,NVL(SUCCRABASSIGNESTABCS_CONV55, ????????????????????????????????????NVL(a.NBRRNCRELPSRAB,0)-NVL(a.REL_REQ_PS_16,0)-NVL(a.REL_REQ_PS_40, ????????????????????????????????????NVL(a.NBRRABPSRELIUCONN, ????????????????????????????????????round(SFB_DIVFLOAT_1(NVL(a.NBRRNCRELPSRAB,0)+NVL(a.NBRRABPSRELIUCONN,0)-?NVL(a.RAB_PS_REL_IU_CONN_16,0)-NVL(a.RAB_PS_REL_IU_CONN_40,a.SUCCRABASSIGNESTABPS, ????????????????????????????????????NVL(a.NBRBLOCKSRECEIVEDCS_CONV, ????????????????????????????????????NVL(a.NBRERRBLOCKSRECEIVEDCS, ????????????????????????????????????round(NVL(SFB_DIVFLOAT_1(a.NBRERRBLOCKSRECEIVEDCS_CONV55,a.NBRBLOCKSRECEIVEDCS_CONV55, ????????????????????????????????????round(NVL(SFB_DIVFLOAT_1(a.NBRERRBLOCKSRECEIVEDPS,a.NBRBLOCKSRECEIVEDPS, ????????????????????????????????????NVL(b.ATTOUTCS, ????????????????????????????????????NVL(b.FAILOUTCS, ????????????????????????????????????round(SFB_DIVFLOAT_1(NVL(b.ATTOUTCS,0)-NVL(b.FAILOUTCS,NVL(b.ATTOUTCS, ????????????????????????????????????NVL(b.ATTOUTPSUTRAN, ????????????????????????????????????NVL(b.FAILOUTPSUTRAN, ????????????????????????????????????round(SFB_DIVFLOAT_1(NVL(b.ATTOUTPSUTRAN,0)-NVL(b.FAILOUTPSUTRAN,NVL(b.ATTOUTPSUTRAN,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_sqln " ; ?????? 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 ; ?????? foreach ? my ? $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 ? < ? $dataLen ;? $HH ++ ){ ?????????????? $gisInc ? = ? $gisInc ? . ? " '$data[$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 ? " $MMn " ; ??????}???? ???? ???? $gisdb_dbh -> do ( " commit " ); } ???? $npmdb_dbh -> disconnect(); ???? $gisdb_dbh -> disconnect(); exit ( 0 ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |