mysql儲存過程游標的運用,適合對游標剛學習者。

2021-07-09 03:48:48 字數 2617 閱讀 5767

近來,因業務的需要寫了乙個儲存,放上面曬曬。適合對游標剛學習者,大致業務是實現對多張表審核操作需要插入審核訊息記錄

--建立帶有三個輸入引數,乙個輸出引數的儲存

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...