這裏是我的表例子:如何設置變量和過程變量爲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