sub callSP()
{
my $db_handle = new MP::ATCA::SQLExec(
MYSQL_DB,
MYSQL_PORT,
AUTO_COMMIT
);
if (!defined($db_handle))
{
# Connection/Validation error
return 1;
}
my $sqlStmt = qq(DROP PROCEDURE IF EXISTS xyz);
my $errStr = $db_handle->Execute($sqlStmt);
if ($errStr ne "")
{
print("DROP PROCEDURE failed\n");
return 0;
}
$sqlStmt = qq(CREATE PROCEDURE xyz()
BEGIN
update myTable set
A=REPLACE(A, '\\', ''),
B=REPLACE(B, '\\\\', ''),
C=REPLACE(C, '\\\\', '')
where A LIKE '["[%';
commit;
END);
print $sqlStmt . "\n";
$errStr = $db_handle->Execute($sqlStmt);
if ($errStr ne "")
{
print("CREATE PROCEDURE failed\n");
return 0;
}
$sqlStmt = "CALL xyz()";
$errStr = $db_handle->Execute($sqlStmt);
if ($errStr ne "")
{
print("EXECUTE PROCEDURE failed\n");
return 0;
}
}
上記の関数は、ストアドプロシージャxyzが存在する場合は削除し、それを作成して実行します。ストアドプロシージャには更新ステートメントが1つしかありません。しかし、プロシージャの作成は私のために失敗しています。しかし、エラーは、更新ステートメントの一部であるA=REPLACE(A, '\\', ''),
行にあるようです。この行を削除すると、すべて正常に動作します。perlスクリプトを使用してmysqlストアドプロシージャを作成する際に直面する問題
更新ステートメントの目的は、\(バックスラッシュ)と\\(ダブルバックスラッシュ)をそれぞれ列AとB、Cの値から削除することです。
しかし、上記のperl関数から同じ定義を上記のperl関数からxyz.txtというテキストファイルにコピーしてmysqlプロンプトでmysql > source xyz.txt
を実行すると、正常に作成されて実行できます。しかし、私はperlスクリプトから手続きを作成する必要があります。助けてください。