使用perl无法加载文件

时间:2014-09-12 02:41:47

标签: perl db2 dbi

我的问题是使用perl将本地文件加载到db2数据库。   文件内容就像:

john|man|eight|usa
pis|woman|seven|china

拆分为“|”,我只想将其加载到db2数据库。   这是代码:

use strict;
use DBI;
use DBD::DB2;

sub main {
    $dbh = getConnect($dataSource);
    if ( defined $dbh ) {
        print "success\n";
    } else {
        print "failed。\n";
        exit(1);
    }
    print "loading file……\n";

    run_sql();

    return closeConnect($dbh);
}

sub run_sql {
    my $sqlStr = "";

    $sqlStr = "
load from '$DATA_FILE' of del modified by codepage=1208 coldel| insert into $TABLE
"
        ;
    print "$sqlStr \n";
    my $sth = $dbh->prepare($sqlStr) or return $FALSE;
    my $ret = $sth->execute();
    $sth->finish();
    if ($ret) {
        print "success!";
        return $TRUE;
    } else {
        print "failed!";
        exit(1);
    }

}
main();

当我运行这个脚本时,它无法工作。今天有人帮助我!

1 个答案:

答案 0 :(得分:0)

LOAD不是可以编写的SQL语句,因此无法通过DBI(或任何其他仅限SQL的接口(如JDBC))执行。LOAD是DB2的实用程序CLP知道如何执行。

如果你只能通过SQL执行,你可以考虑使用ADMIN_CMD to call the LOAD utility,但这有缺点,它要求数据文件位于数据库服务器上。

或者,您可以考虑尝试使用perl的system()调用来利用DB2 CLP。 This SO answer shows how要这样做。请注意,如果您的数据文件不在数据库服务器上,则您需要确保在加载语句中指定CLIENT(即LOAD CLIENT from $datafile ...