mysql - 在 perl 中执行过程查询

标签 mysql perl

我有这样的问题

set @valid_total:=0;
set @invalid_total:=0;
select week as weekno, measured_week,project_id as project, 
role_category_id as role_category,
valid_count,valid_tickets,
(@valid_total := @valid_total + valid_count) as valid_total, 
invalid_count,invalid_tickets, 
(@invalid_total := @invalid_total + invalid_count) as invalid_total
from metric_fault_bug_project 
where measured_week = yearweek(curdate())
and role_category_id = 1 and project_id = 11;

它在 heidi(MySQL 客户端)中执行得很好,但是当涉及到 perl 时,它给了我这个错误

DBD::mysql::st execute failed: You have an error in your SQL syntax; check the m
anual that corresponds to your MySQL server version for the right syntax to use
near ':=0;
                                set :=0;
                                select week as weekno, measured_week,project_id
as project' at line 1 at D:\Mx\scripts\test.pl line 35.
Can't execute SQL statement: You have an error in your SQL syntax; check the man
ual that corresponds to your MySQL server version for the right syntax to use ne
ar ':=0;
                                set :=0;
                                select week as weekno, measured_week,project_id
as project' at line 1

问题似乎出在 set @valid_total := 0; 行中。

我是 Perl 的新手。谁能帮忙?

这是完整的perl代码

#!/usr/bin/perl

#use lib '/x01/home/kalpag/libs';


use DBI;
use strict;
use warnings;

my $sid = 'issues';
my $user = 'root';
my $passwd = 'kalpa';
my $connection = "DBI:mysql:database=$sid;host=localhost";


my $dbhh = DBI->connect( $connection, $user, $passwd) ||
            die "Database connection not made: $DBI::errstr";


my $sql_query = 'set @valid_total:=0;
         set @invalid_total:=0;
         select week as weekno, measured_week,project_id, 
                 role_category_id as role_category,
         valid_count,valid_tickets,
             (@valid_total := @valid_total + valid_count) as valid_total, 
                 invalid_count,invalid_tickets, 
         (@invalid_total := @invalid_total + invalid_count) as invalid_total
         from metric_fault_bug_project 
         where measured_week = yearweek(curdate())
         and role_category_id = 1 and project_id = 11';

 my $sth = $dbhh->prepare($sql_query) or die "Can't prepare SQL statement:     $DBI::errstr\n";

 $sth->execute() or die "Can't execute SQL statement: $DBI::errstr\n";

while ( my @memory = $sth->fetchrow() )
{
            print "@memory \n";
}

最佳答案

您可能正在为查询字符串使用双引号字符串,在这种情况下,perl 会查找变量 @valid_total@invalid_total。这意味着您没有使用

use strict;
use warnings;

否则你已经知道错误了。结果是 perl 将变量替换为空,这反射(reflect)在您的错误中。

你需要做的是单引号字符串:

my $query = 'set @valid_total:=0;
set @invalid_total:=0;
select week as weekno, measured_week,project_id as project, 
role_category_id as role_category,
valid_count,valid_tickets,
(@valid_total := @valid_total + valid_count) as valid_total, 
invalid_count,invalid_tickets, 
(@invalid_total := @invalid_total + invalid_count) as invalid_total
from metric_fault_bug_project 
where measured_week = yearweek(curdate())
and role_category_id = 1 and project_id = 11';

关于mysql - 在 perl 中执行过程查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952287/

相关文章:

javascript - 继承关联 N :M

MySQL - 如何有效地获取 ID 最低的行?

mysql - 连接不同列中的 2 个查询

Python MysqlClient (MYSQLDB) 无法连接到远程服务器

perl - Perl 是否有一个关联数组类型可以有任何类型的键?

php - 使用多个 AJAX 操作的正确方法?

perl - 如何使用 Perl LWP 抓取欢迎页面?

perl - 使用 perl 使用 sendmail 发送电子邮件

perl - 无法对未定义的值调用方法 X

perl - 有这种类型的名称吗?