我尝试在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::Statement
和SQL::Parse
,但没有解决问题。我在Windows 8.1上运行。造成错误的原因是什么?
答案 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
。
作为替代方案,为什么不简单地连接两个文件?