1

「ワークフロー」テーブルに行が作成されたら、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 ;
4

0 に答える 0