这里是我的表例子:如何设置变量和过程变量为MySQL在Perl脚本
Id | Time | Predicted | Actual | High
----+------------+------------+----------+---------
1 | 01:00:00 | 100 | 100 | NULL
2 | 02:00:00 | 200 | 50 | NULL
3 | 03:00:00 | 150 | 100 | NULL
4 | 04:00:00 | 180 | 80 | NULL
我想找到预测最高值,并将其放置在“高”栏(在特定的ROW)
=========使用以下语法我能够在SQL MANUALLY实现这一具有以下:
SET @峰=(SELECT MAX(预测)FROM表);
UPDATE table SET Peak = @ peak WHERE Id ='1';
Id | Time | Predicted | Actual | High
----+------------+------------+-----------+---------
1 | 01:00:00 | 100 | 100 | 200
2 | 02:00:00 | 200 | 50 | NULL
3 | 03:00:00 | 150 | 100 | NULL
4 | 04:00:00 | 180 | 80 | NULL
=======================================
然而,当我尝试使用上面的语法在Perl脚本失败是由于“@”或任何变量符号。这是Perl的语法我试图克服变量的问题,没有真正有利。
my $Id_var= '1';
my $sth = $dbh->prepare('set @peak = (SELECT MAX(Predicted) FROM table)');
my $sti = $dbh->prepare ("UPDATE table SET Peak = @peak WHERE Id = ? ");
$sth->execute;
$sth->finish();
$sti->execute('$Id_var');
$sti->finish();
$dbh->commit or die $DBI::errstr;
,出现以下错误: 全局符号“@peak结果这个“?在前期领先的语法与执行(@peak)”参数将在该@peak变量,即使是真实的“要求明确的包名称
我将不胜感激任何帮助,让我的Perl脚本中工作。
你不应该调用'在执行'语句后完成。只需要调用'finish'的唯一时间就是如果您只想获取由SELECT返回的结果的子集。有关详细信息,请参见[文档](https://metacpan.org/pod/DBI#finish)。 – ThisSuitIsBlackNot 2014-10-28 06:35:20
更重要的是,变量'$ Id_var'是单引号,所以它的值不会被内插。这意味着你的查询只会更新'Id'是字符串'$ Id_var'的行,我怀疑是你想要的。您可以忽略引号(您使用了一个占位符,因此它会在必要时自动引用该值):'$ sti-> execute($ Id_var);' – ThisSuitIsBlackNot 2014-10-28 06:38:19
为什么您从select语句中的单引号切换到更新语句中的双引号?如果你坚持使用单引号,那么它就会起作用。 – 2014-10-28 09:34:43