【发布时间】:2020-05-12 03:14:17
【问题描述】:
我正在使用此处提供的示例的略微修改版本:https://metacpan.org/pod/distribution/SQL-Statement/lib/SQL/Statement/Structure.pod
use SQL::Statement;
use Data::Dumper;
my $sql = q{
SELECT c1
, col2 as c2
, c3
FROM table1 t1, table2 t2
WHERE t1.c1 = t2.c2
and t1.c1 in (11111, 22222, 33333)
GROUP by t1.c1
};
my $parser = SQL::Parser->new('ANSI');
$parser->{RaiseError}=1;
$parser->{PrintError}=0;
my $stmt = SQL::Statement->new($sql, $parser);
print Dumper($stmt->where_hash());
但是当我这样做时,我得到了这个没有意义的错误,因为它是一个非常常见的结构:
Bad table or column name: '11111,22222,33333' has chars not alphanumeric or underscore! at /home/palert/perl5/perlbrew/perls/perl-5.28.1/lib/site_perl/5.28.1/SQL/Statement.pm line 90.
我错过了什么?
【问题讨论】:
-
似乎是解析器的错误/限制。尝试联系作者?
-
我认为 SQL 不应该是
and t1.c1 in (11111, 22222, 33333)而是and t1.c1 in ('11111', '22222', '33333')-- 请注意,引用可以是不同的类型,请查阅您的数据库文档。 -
我发现
SQL::Statement真的很挑剔,并且没有处理文档似乎建议的很多事情。 -
小鲍比桌响起打招呼。
-
嗨@Ether,我不得不查一下,但是这很有趣。我上面的例子不是来自一些实际代码,而是一个简化版本,旨在说明问题。
标签: sql perl dbi dbd sql-parser