近來,因業務的需要寫了乙個儲存,放上面曬曬。適合對游標剛學習者,大致業務是實現對多張表審核操作需要插入審核訊息記錄
--建立帶有三個輸入引數,乙個輸出引數的儲存
create procedure prop_dealmessage (in ids integer ,in status1 integer ,in op integer , out ids1 varchar(20))
begin
--宣告業務變數
declare v_sql varchar(100);
declare var1 varchar(20);
declare message text;
declare var2 varchar(20);
declare var3 integer;
--宣告游標並標記游標是否可讀;no_more_departments = 0 可讀;no_more_departments = 1 不可讀;這裡大量宣告了多個游標其實不可取,但用動態sql也不好處理,為了--完成任務暫時就這麼寫上去了。
declare no_more_departments integer default 0;
declare c_result cursor for select title,createuser from project_info where id = ids;
declare c_result1 cursor for select p.title,pd.userid from project_detail pd left join project_info p on p.id = pd.projectinfoid where pd.id = ids;
declare continue handler for not found
set no_more_departments =1;
set ids1 = ",";
--處理我的業務邏輯,讀者不用關心細節
if (op = 1 || op =7) then
if status1 = 22 then set message = ( select concat("恭喜!你的專案已通過審核成功發布!-"));
elseif status1 = 23 then set message = "傷心!你的專案未通過審核,下次努力!-" ;
elseif status1 = 21 then set message = "耐心! 後台正在複審!-" ;
end if;
open c_result; --開啟游標
dept_loop:repeat
fetch c_result into var1 ,var3; --將游標每次迭代的資料賦值給變數var1,var3
if no_more_departments= 0 then
insert into user_message(receiveid,sendid,content,type,enabled,isdeleted,createdate) values( var3,-1, concat(message,"\"",var1,"\""),11,1,0,now());--滿足條件執行插入資料
select last_insert_id() into var2;
set ids1 = concat(ids1 ,var2 ,",");
end if;
until no_more_departments end repeat dept_loop;
close c_result; --關閉游標
elseif op =2 then
if status1 = 22 then set message = ( select concat("恭喜!你通過審核成功加入-"));
elseif status1 = 23 then set message = "傷心!你未通過審核失敗加入!-" ;
elseif status1 = 21 then set message = "耐心! 後台正在複審!-" ;
end if;
open c_result1;
dept_loop:repeat
fetch c_result1 into var1 ,var3;
if no_more_departments= 0 then
insert into user_message(receiveid,sendid,content,type,enabled,isdeleted,createdate) values( var3,-1, concat(message,"\"",var1,"\""),11,1,0,now());
select last_insert_id() into var2;
set ids1 = concat(ids1 ,var2 ,",");
end if;
until no_more_departments end repeat dept_loop;
close c_result1;
end if;
end--呼叫帶差儲存
call prop_dealmessage(4, 22,8,@x);
select @x;
--總結:讀者只要將游標的適用當做迴圈的適用方法,就很好學習游標的運用了。
mysql 儲存過程 游標的使用
儲存過程 create procedure changefrozen begin 定義變數 declare i int default 0 declare d int default 0 declare y id int declare y uid int declare y task id int...
mysql儲存過程,對游標的操作
create procedure p delete test teacher in t id bigint,out res code int begin 定義游標結束標記 declare done int default 0 定義臨時儲存變數儲存遍歷右邊的id declare tmp id bigi...
mysql儲存過程以及游標的使用
create procedure sp1 begin declare s int default 0 declare f total int declare f playerid varchar 30 declare cur cursor for select count as total play...