5

Trigger からストアド プロシージャを呼び出すと、次のエラーが発生します。

動的 SQL は、ストアド関数またはトリガーでは許可されていません

なぜこれが起こっているのか、トリガーから呼び出されるストアドプロシージャで動的SQLが実行されています。これが問題なのかもしれませんが、もしそうなら回避策はありますか?

編集(コードを追加):

マスターテーブルからのトリガーは次のとおりです。

-- Trigger DDL Statements
DELIMITER $$

USE `TestaDataBase`$$
CREATE TRIGGER `TestaDataBase`.`UpdateAuxilaryTable`
AFTER INSERT ON `MainTable` FOR EACH ROW  
BEGIN    
    /* Here we call stored procedure with parameter id of newly inserted row. */
    CALL TestProcedure('Year', 'Person', 'IdPerson', NEW.IdData);
END
$$

そして、トリガーから呼び出されるストア プロシージャは次のとおりです。

DELIMITER $$
CREATE PROCEDURE `TestDataBase`.`TestProcedure` (IN attribute CHAR(64), IN tableName CHAR(64), IN IdTable CHAR(64), IN IdLastRow MEDIUMINT)
BEGIN
DECLARE selectedValue MEDIUMINT;

SET @statement = CONCAT('SELECT ', attribute, ' FROM ', tableName, ' WHERE ', IdTable, ' = ', IdLastRow, ' INTO selectedValue');
PREPARE statementExecute FROM @statement;
EXECUTE statementExecute ;
...
...
END
4

1 に答える 1

5

プリペアド ステートメントを使用してストアド プロシージャをトリガーから呼び出すことはできません

http://dev.mysql.com/doc/mysql-reslimits-excerpt/5.1/en/stored-program-restrictions.html

可能な回避策がありますが、動的 SQL を実行する UDF を作成し、プロシージャから UDF を呼び出す必要があります。UDF の例は、mysql の src、sql/udf_example.c にあります。

于 2012-11-04T12:05:15.280 に答える