“无法在DBD :: CSV中找到FROM子句中的表名”错误

时间:2014-01-09 11:30:57

标签: perl csv dbi

我尝试在UNION中使用DBI语句合并两个CSV文件:

#!/usr/bin/perl -w

use strict;
use DBI;

my $dbh = DBI->connect ("dbi:CSV:") 
    or die "Cannot connect to the CSV file: $DBI::errstr()";
$dbh->{RaiseError} = 1;
$dbh->{TraceLevel} = 0;

my $query = "select * from file.csv UNION select * from output.csv";
my $sth = $dbh->prepare ($query);
$sth->execute ();
$sth->dump_results();
$sth->finish();
$dbh->disconnect();

但是,我收到以下错误:

  

无法在FROM子句中找到表名!在   C:/Perl64/site/lib/SQL/Statement.pm第88行。
DBD :: CSV :: db准备   失败:无法在FROM子句中找到表名!在C:/ Perl64   /site/lib/SQL/Statement.pm第88行。
[for Statement" select * from   file.csv UNION select * from output.csv"] at CSV。第15行。
  DBD :: CSV :: db准备失败:无法在FROM子句中找到表名!在   C:/ Perl64 /site/lib/SQL/Statement.pm第88行。
[for Statement" select   *来自file.csv UNION select * from output.csv"] at CSV。第15行。

我按其他地方的建议更新了SQL::StatementSQL::Parse,但没有解决问题。我在Windows 8.1上运行。造成错误的原因是什么?

2 个答案:

答案 0 :(得分:2)

从查询中删除.csv个扩展名,并确保您的文件位于当前目录中:

my $query = "select * from file UNION select * from output";

您还可以使用csv文件显式设置文件夹,

my $dbh = DBI->connect ("dbi:CSV:", "", "", {
    f_dir => 'C:\path_to_csv',
});

答案 1 :(得分:1)

DBD::CSV使用SQL::Statement作为其SQL引擎。 SQL :: Statement only supports a subset of SQL commands,不包括UNION

作为替代方案,为什么不简单地连接两个文件?