基本思路就是通过perl读取dbc.columns,获取字段信息,拼接出导出的sql,然后通过传参方式传递给fastexport进行导出,由于我目前所用的TERADATA的fastexport版本分隔符直接导出会出现乱乱码情况,所以采用定长模式+拼接分隔符进行导出,然后使用perl进行空格替换,fastexport函数定义如下:
sub run_fexp_command
{
my(@PAREXSQL)=@_;
print " @PAREXSQL";
my $colname = $columnname->[0][0];
my $colleng = $columnlength->[0];
my $rc = open(BTEQ, "| fexp ");
unless ($rc)
{
print "Could not invoke BTEQ command/n";
return -1;
}
# ------ Below are BTEQ scripts ------
print BTEQ <<ENDOFINPUT;
.LOGON NDBC/etl,zyuc309;
.LOGTABLE $logtable;
.BEGIN EXPORT ;
.EXPORT OUTFILE $filepath$filename MODE RECORD FORMAT TEXT;
@PAREXSQL
;
.END EXPORT;
.LOGOFF;
.QUIT 0;
ENDOFINPUT
close(BTEQ);
my $RET_CODE = $? >> 8;
if ( $RET_CODE == 12 ) {
return 1;
}
else {
return 0;
}
}