【问题标题】:Loop through temporary table in trigger循环遍历触发器中的临时表
【发布时间】:2013-08-06 10:36:38
【问题描述】:

我有一个包含临时表的触发器。现在我希望遍历临时表并在每一行上做一些事情。有没有一些简单的方法可以做到这一点?我用谷歌搜索过,但对于这么简单的任务来说,一切似乎都过于复杂了。

CREATE TRIGGER myTrigger AFTER UPDATE ON myTable
FOR EACH ROW
BEGIN
IF NEW.col <> OLD.col THEN
    DROP TEMPORARY TABLE IF EXISTS tmpTable;
    CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable AS (my select statement);
    --For each row in tempTable--
        Do something
    --
    DROP TEMPORARY TABLE tmpTable;
END IF;
END

【问题讨论】:

  • 通常不需要额外的桌子。您的查询是什么?也许可以一步完成。

标签: mysql loops triggers


【解决方案1】:

要有rownumber 你可以这样做:

DROP TEMPORARY TABLE IF EXISTS tmpTable;
CREATE TEMPORARY TABLE IF NOT EXISTS tmpTable AS (
SELECT  l.*,
    @curRow := @curRow + 1 AS row_no
FROM    XXX_TABLE l
JOIN    (SELECT @curRow := 0) r);

使用它你可以使用WHILE循环:

DECLARE n INT DEFAULT 0;
DECLARE i INT DEFAULT 0;
SELECT COUNT(*) FROM tmpTable INTO n;
SET i=0;
WHILE i<n DO 
  SET i = i + 1;

  -- do sth WHERE row_no=i;

END WHILE;

【讨论】:

  • 对不起,我之前没能接受你的回答,最近没有太多时间做 SO =/ 很有帮助,谢谢!
猜你喜欢
  • 2014-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多