2015-05-21 26 views
0

例如,以下可以嗎?更新遊標的查詢表是否合法

DECLARE aId VARCHAR(20); 
DECLARE cur1 CURSOR FOR SELECT id FROM new_records WHERE is_loaded = false; 
read_loop: LOOP 

    FETCH cur1 INTO aId; 
    ... 
    update new_records set is_loaded = True where id = aId ; 
    ... 
    CLOSE cur1; 
END 

回答

1

MySQL中的遊標是ASENSITIVE(13.6.6 Cursors)。

一個INSENSITIVE光標是一個光標,有效地導致其結果副本的一個單獨的 表被創建;遊標訪問該副本, 而不是原始結果,因此其他方法對原始結果所做的任何更改都不會對此遊標可見。敏感 光標是一個直接在其結果表上工作的光標:它使得 沒有副本,因此對該結果表的其他更改將對此光標的 可見。 ASENSITIVE遊標可能會也可能不會製作其 結果表的副本;對其結果表的其他更改是否爲 可見是實現定義的。默認值是一個ASENSITIVE 光標。

- 從DECLARE CURSOR Statement -

SQL Fiddle demo

但是,這取決於你需要做什麼,還有其他的方法來更新表。

+0

謝謝,並且,通過其他方式,您是否使用臨時表? –