從語法上來講declare cur cursor for語句必須寫在set @sqlstr前面,這就意味著不能通過先執行一條動態語句根據結果拼湊游標的內容,而且游標在定義的時候也沒有引數的概念,而是將定義的結構完全當作乙個字串直接處理,不會做任何的處理,也就是靜態游標吧。關於dynamic cursor的內容官方有解釋我從5.1找到5.6只有這乙個地方講dynamic cursor而且內容一模一樣。
解決方法:
思路 1、將自己想要傳遞的變數暫時儲存在乙個檢視或則臨時的表中,將變數放入檢視
2、定義游標時直接查詢這個檢視(因為不可以傳遞變數,但是我們可以在檢視中包含變數)
3、呼叫上面兩個儲存過程
實現:
begin
declare done int default 0;
declare temp_id int;
declare cur cursor for( select id from tree_test_view);
declare continue handler for not found set done = 1;
drop view if exists tree_test_view;
set @sqlstr = "create view tree_test_view as ";
set @sqlstr = concat(@sqlstr , "select id from tree_test where parent_id = 0 limit ", top);
prepare stmt from @sqlstr;
execute stmt;
deallocate prepare stmt;
open cur;
fetch cur into temp_id;
while done <> 1 do
delete from tree_test where id = temp_id or parent_id = temp_id;
fetch cur into temp_id;
end while;
close cur;
end
動態sql中使用臨時表的例項
來自 在動態sql 語句中使用臨時表 不能使用臨時表 變數名 動態sql語句大家都經常會用到,下面就為您介紹乙個動態sql中使用臨時表的例子,供您參考,希望對您學習動態sql語句方面能有所幫助。drop table t 1 declare sqlste varchar 200 create tabl...
mysql 使用變數 MySQL變數的使用
在編寫儲存過程中,有時需要使用變數,儲存資料處理過程中的值 mysql中,變數可以在子程式中,宣告並使用,作用範圍在begin end程式中 在儲存過程中,使用declare語句,定義變數 語法格式 declare var name varname date type default value v...
vue中使用css變數實現動態改變愛心顏色
需要定時更改顯示的樣式的顏色,實現愛心流星雨的顏色實時變化 需要使用到css變數,js的 document.body.style.setproperty函式 需要在data中定義兩個屬性 timer value 0 在生命週期鉤子mounted中進行新增定時器操作 this.timer setint...