Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
未知函数';长度';在/usr/lib/perl5/site_perl/5.8.5/SQL/Statement.pm第88行_Sql_Perl_Parsing - Fatal编程技术网

未知函数';长度';在/usr/lib/perl5/site_perl/5.8.5/SQL/Statement.pm第88行

未知函数';长度';在/usr/lib/perl5/site_perl/5.8.5/SQL/Statement.pm第88行,sql,perl,parsing,Sql,Perl,Parsing,以下是代码的一部分: use SQL::Statement; my $qryParse = "select colA from tableB where length(colA)>0"; my $sqlParser = SQL::Parser->new(); $sqlParser->dialect('ANSI'); my $stmt = SQL::Statement->new($qryParse,$sqlParser); 错误显示: 位于的未知函数“长度” /usr/l

以下是代码的一部分:

use SQL::Statement;
my $qryParse = "select colA from tableB where length(colA)>0";
my $sqlParser = SQL::Parser->new();
$sqlParser->dialect('ANSI');
my $stmt = SQL::Statement->new($qryParse,$sqlParser);
错误显示:

位于的未知函数“长度” /usr/lib/perl5/site_perl/5.8.5/SQL/Statement.pm第88行


如何告诉解析器“length”是一个pl/sql函数?或者也应该安装一些pl/sql方言文件?

您有一些选项。首先是告诉解析器有关新函数的信息

my $extend_sql = "CREATE FUNCTION LENGTH";
my $sql = "select colA from tableB where length(colA)>0";

my $sqlParser = SQL::Parser->new();
$sqlParser->dialect('ANSI');

my $query = join ", ", $extend_sql, $sql;
my $stmt = SQL::Statement->new($query, $sqlParser);
这不能很好地扩展,因此您需要使用扩展子类化。不幸的是,这并不能说明什么

最后,您可以使用或通过子类化,然后使用
$sqlParser->方言('Oracle')
来编写SQL::方言::Oracle文件。不幸的是,您将要子类化的关键
get\u config
方法只会返回一个大字符串,因此添加到该字符串将非常麻烦。幸运的是,您可以使用
get\u config\u as\u hash
为您完成这项工作。很遗憾,我不知道如何指定函数:(


因为我很难弄清楚这一点,我也就是说,
$sqlParser->方言($方言)
什么都不做,你必须写
我的$sqlParser=SQL::Parser->new($方言)

这个查询是针对什么数据库的?MySQL?pg?你为什么使用“SQL::Statement”?这是用于输入验证吗?任务是列出一大堆查询中使用的所有表/字段,因此SQL::Statement看起来不错,但也许有更好的方法?既然您要求使用ANSI方言,ANSI函数
字符长度
八位字节长度
是否比非AND更适合您的目的ard函数长度?显然,这不是非标准函数的通用解决方案。是的,更改函数名称是解决此问题的另一种方法,但它还需要检查所有可用语法,这就是为什么我询问方言文件。我不知道用户将用我的脚本解析什么查询,它应该适用于所有查询。@Kate Update我被一些关于编写方言文件的信息所困扰,但我不能提供一个完整的答案。