perl unload utf-8 oracle Wide character in print at unload_oracle.pl line 105.

来源:互联网 发布:能过淘宝账号查一个人 编辑:程序博客网 时间:2024/06/04 18:27
#!/usr/bin/perl use DBI;use Encode;my $dbName = 'oadb';my $dbUser = 'vxspace';my $dbUserPass = 'xxx';my $dbh = DBI->connect("dbi:Oracle:$dbName", $dbUser, $dbUserPass) or die "can't connect to database ";my $table_name= "$ARGV[0]"; my $hostSql = qq{select COLUMN_NAME from dba_tab_columns where table_name='$table_name'};my $UNLOAD_SRC_DBCONN = DBI->connect("DBI:Oracle:".$dbName,$dbUser,$dbUserPass) or die("DB connect error!n");my $DW_DATA_DT ="";my $datafile="$table_name.TXT";use HTTP::Date qw(time2iso str2time time2iso time2isoz);my @lstRlst;my ($COLUMN_NAME);my $selStmt = $dbh->prepare($hostSql);$selStmt->bind_columns(undef, \$COLUMN_NAME);$selStmt->execute();while( $selStmt->fetch() ){  print "$COLUMN_NAME\n";push  (@lstRlst1 ,$COLUMN_NAME);  }  $selStmt->finish;  $dbh->disconnect;my @lstRlst = reverse (@lstRlst1);###########################################=================全局变量区==========================#if ($#ARGV <0){        print "请输入一个表名参数";        exit(-1);    }sub printlog{  my ($LogInfo)= @_;  my $CurrTime = time2iso(time());                   # 当前时间  if(!defined($LogInfo) ){$LogInfo="";}  my $StrLog="【${CurrTime}】 \t ${LogInfo} \n";     print $StrLog;  #print LOGFILE $StrLog;  }  my $exportOracleSql="SELECT ";  #数据导出的sqlfor (my $m=0;$m<@lstRlst + 0 ;$m++){ if  ($m != @lstRlst + 0 - 1){  $exportOracleSql = "$exportOracleSql trim($lstRlst[$m])".", "}else{$exportOracleSql = "$exportOracleSql trim($lstRlst[$m])"}print "$exportOracleSql\n";}my $exportOracleSql="$exportOracleSql from $dbUser.$table_name";sub Exportdata{    printlog "开始导出数据!";    my $exportsql=$exportOracleSql;    if($exportsql eq "error"){    return -1;    }    my $format_sql="alter session set nls_date_format='yyyy-mm-dd'";    my $stmt=$UNLOAD_SRC_DBCONN->prepare($format_sql);    unless ($stmt){printlog "\n执行prepare SQL语句出错:\n";printlog $DBI::errstr; return -1;}$stmt->execute;if ($UNLOAD_SRC_DBCONN->err) {printlog "\n执行SQL语句出错:\n"; printlog $DBI::errstr;return -1;}     $stmt=$UNLOAD_SRC_DBCONN->prepare($exportsql);    unless ($stmt){printlog "\n执行prepare SQL语句出错:\n";printlog $DBI::errstr;return -1;}       $stmt->execute;if ($UNLOAD_SRC_DBCONN->err) {printlog "\n执行SQL语句出错:\n"; printlog $DBI::errstr;return -1;}     my $row=0;     my $size=0;     my $curtime;               my $writeflagsql;     my $tmpstr="";     $row=0;     my $m=0;               open(DATAFILE,">", $datafile) || die (print "Open DATA file failed!!!\n");     while(my $Rows = $stmt->fetchrow_arrayref){     $m=0;     $tmpstr="";     foreach(@$Rows){     $tmpstr=$tmpstr.$Rows->[$m]."|";     $m++;     }     #print DATAFILE encode_utf8($tmpstr.$DW_DATA_DT)."\n";     print DATAFILE $tmpstr.$DW_DATA_DT."\n";     $row++;     if(($row%10000) == 0){     printlog "已导出数据$row条!";     }              }             $stmt->finish;        #print FLAGFILE $datafile,"\n";        #print FLAGFILE $row,"\n";        close(DATAFILE);        #  close(FLAGFILE);        $curtime=time2iso(time());          printlog "数据已成功导出!";          printlog "一共导出数据${row}条";                          return 1;}ExportdataWide character in print at unload_oracle.pl line 105.Wide character in print at unload_oracle.pl line 105.Wide character in print at unload_oracle.pl line 105.【2016-11-17 19:02:25】  数据已成功导出! 【2016-11-17 19:02:25】  一共导出数据3726条 需要encode_utf8($tmpstr.$DW_DATA_DT)."\n";

0 0