--儲存過程名和引數,引數中in表示傳入引數,out標示傳出引數,inout表示傳入傳出引數
create procedure p_procedurecode(in sumdate varchar(10))
begin
declare v_sql varchar(500); --需要執行的sql語句
declare sym varchar(6);
declare var1 varchar(20);
declare var2 varchar(70);
declare var3 integer;
--定義游標遍歷時,作為判斷是否遍歷完全部記錄的標記
declare no_more_departments integer default 0;
--定義游標名字為c_result
declare c_result cursor for
select barcode,barname,barnum from tmp_table;
--宣告當游標遍歷完全部記錄後將標誌變數置成某個值
declare continue handler for not found
set no_more_departments=1;
set sym=substring(sumdate,1,6); --擷取字串,並將其賦值給乙個遍歷
--連線字串構成完整sql語句,動態sql執行後的結果記錄集,在mysql中無法獲取,因此需要轉變思路將其放置到乙個臨時表中(注意**中的寫法)。一般寫法如下:
-- 'create temporary table 表名(select的查詢語句);
set v_sql= concat('create temporary table tmp_table(select aa as aacode,bb as aaname,count(cc) as ccnum from h',sym,' where substring(dd,1,8)=''',sumdate,''' group by aa,bb)');
set @v_sql=v_sql; --注意很重要,將連成成的字串賦值給乙個變數(可以之前沒有定義,但要以@開頭)
prepare stmt from @v_sql; --預處理需要執行的動態sql,其中stmt是乙個變數
execute stmt; --執行sql語句
deallocate prepare stmt; --釋放掉預處理段
open c_result; --開啟之前定義的游標
fetch c_result into var1, var2, var3; --取出每條記錄並賦值給相關變數,注意順序
--執行查詢語句,並將獲得的值付給乙個變數 @oldaacode(注意如果以@開頭的變數可以不用通過declare語句事先宣告)
select @oldaacode:=vcaacode from t_sum where vcaacode=var1 and dtdate=sumdate;
if @oldaacode=var1 then --判斷
update t_sum set inum=var3 where vcaacode=var1 and dtdate=sumdate;
else
insert into t_sum(vcaacode,vcaaname,inum,dtdate) values(var1,var2,var3,sumdate);
end if;
until no_more_departments end repeat; --迴圈語句結束
close c_result; --關閉游標
drop temporary table tmp_table; --刪除臨時表
end;
MySQL儲存過程例項
9.3 mysql儲存過程 mysql 5.0以後的版本開始支援儲存過程,儲存過程具有一致性 高效性 安全性和體系結構等特點,本節將通過具體的例項講解php是如何操縱mysql儲存過程的。例項261 儲存過程的建立 這是乙個建立儲存過程的例項 錄影位置 光碟 mingrisoft 09 261 例項...
MYSQL儲存過程例項
2 建立租戶公升級儲存過程 drop procedure if exists helpdesk cater upgradetenantdb delimiter create procedure helpdesk cater upgradetenantdb begin declare done int...
mysql儲存過程例項
儲存過程的作用 第一 儲存過程因為sql語句已經預編繹過了,因此執行的速度比較快。第二 儲存過程可以接受引數 輸出引數 返回單個或多個結果集以及返回值。可以向程式返回錯誤原因。第三 儲存過程執行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程式執行。第四 儲存過程主要是在伺服器上執行,減少...