首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >关于DBD::CSB语句-函数的问题

关于DBD::CSB语句-函数的问题
EN

Stack Overflow用户
提问于 2010-06-05 08:23:43
回答 2查看 334关注 0票数 0

来自SQL::语句::Functions文档:

函数语法

当使用SQL::语句/ SQL::解析器直接解析SQL时,函数(内建的或用户定义的)可能发生在值、列名、表名或谓词的SQL语句中的任何地方。当通过DBD或在解析和执行SQL的任何其他上下文中使用这些模块时,函数可以发生在相同的位置,除非它们不能出现在包含用于解析和执行clause.valid的SELECT语句的列选择子句中。

代码语言:javascript
运行
复制
 SELECT MyFunc(args);
 SELECT * FROM MyFunc(args);
 SELECT * FROM x WHERE MyFuncs(args);
 SELECT * FROM x WHERE y < MyFuncs(args);

仅对解析有效(不适用于DBD)

代码语言:javascript
运行
复制
 SELECT MyFunc(args) FROM x WHERE y;

读了这篇文章,我希望我的示例中的第一个SELECT语句不应该工作,而第二个SELECT语句应该有效,但事实恰恰相反。

代码语言:javascript
运行
复制
#!/usr/bin/env perl
use warnings; use strict;
use 5.010;
use DBI;

open my $fh, '>', 'test.csv' or die $!;
say $fh "id,name";
say $fh "1,Brown";
say $fh "2,Smith";
say $fh "7,Smith";
say $fh "8,Green";
close $fh;

my $dbh = DBI->connect ( 'dbi:CSV:', undef, undef, {
    RaiseError => 1,
    f_ext      => '.csv',
    });

my $table = 'test';

say "\nSELECT 1";
my $sth = $dbh->prepare ( "SELECT MAX( id ) FROM $table WHERE name LIKE 'Smith'" );
$sth->execute ();
$sth->dump_results();

say "\nSELECT 2";
$sth = $dbh->prepare ( "SELECT * FROM $table WHERE id = MAX( id )" );
$sth->execute ();
$sth->dump_results();

产出:

选择1

“7”

1行选择2

未知函数'MAX‘在/usr/lib/perl 5/site_perl/5.10.0/SQL/Parser.pm第2893行。

DBD::CSV::db准备失败:未知函数'MAX‘at /usr/lib/perl 5/site_perl/5.10.0/SQL/Parser.pm第2894行。

对于语句"SELECT * FROM test其中id = MAX( id )“,在./so_3.pl第30行。

DBD::CSV::db准备失败:未知函数'MAX‘at /usr/lib/perl 5/site_perl/5.10.0/SQL/Parser.pm第2894行。

对于语句"SELECT * FROM test其中id = MAX( id )“,在./so_3.pl第30行。

有人能解释我的这种行为吗?

EN

回答 2

Stack Overflow用户

发布于 2010-06-05 10:15:07

尝尝这个

$sth =$dbh-> FROM (“从$table选择* id =(从$table选择MAX( id ))”);

票数 0
EN

Stack Overflow用户

发布于 2011-05-05 23:02:37

我今天看到类似的事情发生了。我发现如果我这么做了

代码语言:javascript
运行
复制
    my $foo = $dbh->prepare("SELECT * FROM $table");
    if($foo) {
       $foo->finish();
    }
    #run your prepare here

在使用UDF或函数的查询之前,错误就消失了.我跟着它:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2979681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档