バックエンドに mySQL データベースを使用して、Perl の SQL::Statement::Functions で定義された UDF を操作しようとしています。http://metacpan.org/pod/SQL::Statement::Functions#User-Defined-Functionsに記載されているように、私は本でそれをプレイしていますが、四角形を離れる前に、CREATE FUNCTION のエラーステートメントは醜い頭をもたげています。最初のコードは次のとおりです ($dbh は与えられたものであり、正常に動作します。これは、私が使用しているフレームワークのより大きな構造の一部にすぎないため、質問をすべてスパムにしたくありませんfoo()
。 22 または "_PK FROM location" による SELECT はすべて問題なく、Data::Dumper のクエリに対応する 22 または値を取得するため、接続は問題ありません):
use Data::Dumper;
use SQL::Statement::Functions;
sub foo {
return 999;
}
#$dbh is defined elsewhere
$dbh->do("CREATE FUNCTION foo") or die "error creating function foo(); " . $dbh->errstr;
my $sth = $dbh->prepare("SELECT foo(22)") or die "error preparing query: " . $dbh->errstr;
$sth->execute or die "error executing query: " . $sth->errstr;
my $row = $sth->fetchrow_arrayref();
print "ROW " . Dumper($row);
エラー メッセージは次のようerror creating function foo(); You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
になり$dbh->do("CREATE...")
ます。
私は CREATE FUNCTION 部分を可能な限り低くしようとしましたが、マニュアルで提案されているように...foo EXTERNAL
とも試しました。...foo EXTERNAL NAME foo
一体、私は関数のパッケージを作成しましたが、役に立ちませんでした。
ここで私が間違っていることはありますか?
私がチェックしたところ、データベースに接続しているユーザーは、alter_routine_priv と create_routine_priv を含むすべての権限を持っています (それが SQL::Statement で使用されている場合)。