0
圖片有兩個表:爲什麼我們需要SQL的遊標?
Table_1:
id | name | phone
---| ---- | ----
1 | aaaa | 1111
2 | bbbb | 2222
3 | cccc | 3333
...| ... | ...
Table_2 who is empty now:
id | name | phone
---| ---- | ----
如果你想選擇TABLE_1一些行並將其插入到TABLE_2,我們可以做到這一點(第一種方式):
insert into table_2
select * from table_1 where name='aaaa';
這很簡單,易於!只是一個單一的代碼行,但cursor
我們需要的代碼行(第二方式使用MySQL的語法):
DECLARE done INT DEFAULT 0;
DECLARE id int(3);
DECLARE name char(11);
DECLARE phone char(11);
DECLARE mycur CURSOR FOR SELECT * FROM Table_1 where name='aaaa';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN mycur;
REPEAT
FETCH mycur INTO id,name,phone;
IF NOT done THEN
INSERT INTO Table_2 VALUES (id,name,phone);
END IF;
UNTIL done END REPEAT;
CLOSE mycur;
我的意思是,在一個正常的producer
,可我們只是用它來處理結果集的第一種方式沒有光標? 什麼時候我們真的需要一個光標?
使用遊標時,無論你試圖做什麼變得如此複雜,你舉起你的手,並願意說:「是的,我不在乎它是如何發生的,多慢,甚至1000倍慢得多呃完成」 – Drew
@Drew您能否給我解釋一下答案中的更多細節,或許是一些例子,謝謝〜 – KaKa
也許如果你面對一些棘手的問題時會更容易回答,而且如果沒有遊標。這是在sql開發初期的一種常見感覺,其中思維是面向程序思維,我的方式,我的for循環與集合和關係以及sql引擎工作的快速方式。所以sql建立在一個柺杖(遊標)。當你在旅途中繼續前行時,你會找到方法來執行你的任務,這是引擎優化的目標。遊標就像非常緩慢。 – Drew