2013-08-06 60 views
0

我有這個觸發器,它擁有一個臨時表。現在我希望遍歷臨時表並在每一行上執行一些操作。有沒有一些簡單的方法來做到這一點?我用Google搜索了一下,但是對於這樣一個簡單的任務來說,一切似乎過於複雜。在觸發器中循環通過臨時表

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 
+1

往往是不需要額外的表。你的查詢是什麼?也許可以一步完成。 –

回答

2

有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; 
+0

它對您有幫助嗎? – jaczes

+0

對不起,我以前無法接受你的答案,最近沒有太多的時間=最好是/這很有幫助,謝謝! –