MySQL のドキュメントには次のように記載されています。
SQL プリペアド ステートメント (PREPARE、EXECUTE、DEALLOCATE PREPARE) はストアド プロシージャで使用できますが、ストアド ファンクションまたはトリガーでは使用できません。したがって、ストアド ファンクションとトリガーは動的 SQL を使用できません (ステートメントを文字列として作成してから実行する場合)。
いいえ、トリガーから動的に作成された名前のファイルにデータを書き込むことはできません。
動的SQLは使用できませんが、単一のファイル名を承認してデータを追加することもできるため、データを一時ファイルにロードし、クエリの結果を追加してから、完全な結果をファイルに出力できます。もちろん、ファイル名以外に動的に作成されたクエリを使用する必要がない場合にのみ機能します。
例:
DELIMITER $$
CREATE TRIGGER rewrite_file AFTER INSERT tableName
BEGIN
CREATE TEMPORARY TABLE IF NOT EXISTS temp(
pk BIGINT
);
LOAD DATA INFILE 'c:/somefile.txt' INTO TABLE temp
LINES TERMINATED BY '\n';
INSERT INTO temp (pk) SELECT primaryKeyField FROM tableName;
SELECT pk INTO OUTFILE 'c:/somefile.txt'
LINES TERMINATED BY '\n'
FROM temp;
END$$
DELIMITER ;
挿入ごとにファイル c:/somefile.txt を追加します。もちろん、ファイルが何百万ものエントリに成長した場合、このソリューションは最悪です。