「ワークフロー」テーブルに行が作成されたら、INSERT...SELECT を実行して「タスク」テーブルに行を作成しようとしています。(ワークフローの作成で使用される process_index は、「process_tasks」テーブルで必要なタスクを検索し、それらをタスク テーブルに作成します)。
ただし、問題は、ワークフロー テーブルで「process_one」の process_index を使用して挿入を実行した後、トリガーの SELECT で行が見つからないことです。@process_id が適切に設定されていないと考えましたが、トリガーでコメントアウトした代替挿入を使用すると、 @process_index が正しく設定されていることがわかります。誰でもアドバイスできますか?
問題を示す簡単なコードを次に示します。
DROP TABLE IF EXISTS workflow;
CREATE TABLE workflow (
id INT(10) PRIMARY KEY AUTO_INCREMENT,
process_index VARCHAR(12)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS tasks;
CREATE TABLE tasks (
id INT(10) PRIMARY KEY AUTO_INCREMENT,
process_index_used VARCHAR(12),
target_field VARCHAR(12)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS process_tasks;
CREATE TABLE process_tasks (
id INT(10) PRIMARY KEY AUTO_INCREMENT,
process_index VARCHAR(12),
source_field VARCHAR(12)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
INSERT INTO process_tasks SET process_index = 'process_one', source_field = 'alpha';
INSERT INTO process_tasks SET process_index = 'process_one', source_field = 'beta';
DROP TRIGGER IF EXISTS workflow_tasks;
DELIMITER //
CREATE TRIGGER workflow_tasks AFTER INSERT ON workflow
FOR EACH ROW BEGIN
DECLARE process_index VARCHAR(12);
SET @process_index = NEW.process_index;
-- INSERT INTO tasks (process_index_used) VALUES (@process_index);
INSERT INTO tasks (target_field) SELECT source_field FROM process_tasks WHERE process_index = @process_index;
END//
DELIMITER ;