MYSQL儲存過程例項

2021-06-25 13:12:00 字數 3788 閱讀 2602

/* 2-------------建立租戶公升級儲存過程 */

drop procedure if exists `helpdesk_cater`.`upgradetenantdb`;

delimiter $$

create procedure `helpdesk_cater`.`upgradetenantdb`()

begin

declare done int default 0;

declare a,c char(64);

declare e varchar(100)default '0';

/* 第一次公升級使用下面第一行,如果有異常租戶庫,以後每次呼叫下面第二行並註解下面第一行*/

declare curtenant cursor for select ent_id, catalog_name from helpdesk_cater.tenant where is_activated = 1;

/*declare curtenant cursor for select ent_id, catalog_name from helpdesk_g3.db_upgrade_error_log;*/

declare continue handler for sqlstate '02000' set done = 1;

declare continue handler for sqlstate '42s02' set e ='表不存在|未知表';/*已測試*/

declare continue handler for sqlstate '42s01' set e ='表已存在';/*已測試*/

declare continue handler for sqlstate '42s21' set e ='重複列名';/*已測試*/

declare continue handler for sqlstate '42s22' set e ='列不存在';

declare continue handler for sqlstate '23000' set e ='重複插入主鍵|外來鍵約束|列不能為空|列不明確|其它情況出錯';/*已測試*/

declare continue handler for sqlstate '42000' set e ='庫不存在|拒絕訪問庫|語句中有sum函式和相同語句中的列|重複鍵名稱|查詢為空|非唯一的表/別名|定義了多個主鍵|鍵列在表中不存在|不正確的資料庫名|不正確的表名|不正確的列名|其它情況出錯';

declare continue handler for sqlwarning set e='發生sqlwarning';

declare continue handler for sqlexception set e='發生sqlexception';/*已測試*/

open curtenant;

delete from `db_upgrade_error_log`;

delete from `db_upgrade_log`;

repeat

fetch curtenant into a, c;

if not done then

/* 記錄操作開始日誌 */

set @log = concat('insert into helpdesk_cater.db_upgrade_log (ent_id, catalog_name, start_time) values ("',a,'","',c,'",now());');

prepare stmt from @log;

execute stmt;

/*set @mst = concat('create table ',c,'.`t_marketingsms_template` (  `id` varchar(32) not null,  `title` varchar(10) default null,  `content` varchar(512) default null,  `creator_id` varchar(32) default null,  `creator_agent_tel` varchar(32) default null,  `create_time` datetime default null,  `modify_time` datetime default null, `is_deleted` tinyint(4) default null,`version` bigint(20) default null,  `reserve1` varchar(32) default null,  `reserve2` varchar(32) default null,  primary key (`id`)) engine=innodb default charset=gbk;');

prepare stmt92 from @prod92;

execute stmt92;*/

公升級指令碼開始 */

/*例子: 2010-09-09 lihf 建立錄音檔案索引表*/

/*set @sclient1 = concat('create table ',c,'.call_records (record_id varchar(255) not null,call_type varchar(32) not null,user_id bigint(20) not null,ani varchar(16) not null,dnis varchar(16) not null,start_time datetime default null,end_time datetime default null,file_name varchar(64) not null,primary key  (record_id)) engine=innodb default charset=gbk;');*/

/*prepare stmtclient1 from @sclient1;*/

/*execute stmtclient1;*/

/*2014-05-04 zhangmx 修改表結構*/

set @ma = concat('alter table ',c,'.`t_marketing_activity`  change `mlabel` `mlabel` text(128) null  comment "營銷活動客戶型別", change `members` `members` text(128) null  comment "營銷活動客戶會員型別";');

prepare stmtma from @ma;

execute stmtma;

/* 公升級指令碼結束 */

/* 記錄日誌,記錄異常資料庫 */

if e!='0' then

insert into helpdesk_g3.db_upgrade_error_log values(a,c);

update helpdesk_g3.db_upgrade_log set error_time = now(),error_message= e ,end_time = now() where ent_id = a;

else

set @log = concat('update helpdesk_cater.db_upgrade_log set end_time = now() where ent_id = "',a,'";');

prepare stmt from @log;

execute stmt;

end if;

set e='0';

end if;

until done end repeat;

close curtenant;

end$$

delimiter ;

/* 5-------------呼叫租戶公升級儲存過程 */

#call `helpdesk_cater`.`upgradetenantdb`();

MySQL儲存過程例項

9.3 mysql儲存過程 mysql 5.0以後的版本開始支援儲存過程,儲存過程具有一致性 高效性 安全性和體系結構等特點,本節將通過具體的例項講解php是如何操縱mysql儲存過程的。例項261 儲存過程的建立 這是乙個建立儲存過程的例項 錄影位置 光碟 mingrisoft 09 261 例項...

mysql儲存過程例項

儲存過程的作用 第一 儲存過程因為sql語句已經預編繹過了,因此執行的速度比較快。第二 儲存過程可以接受引數 輸出引數 返回單個或多個結果集以及返回值。可以向程式返回錯誤原因。第三 儲存過程執行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程式執行。第四 儲存過程主要是在伺服器上執行,減少...

mysql 儲存過程例項

引數分為 in out inout in是輸入引數,在儲存過程中不可修改,out是輸出引數,inout是輸入輸出引數 begin 當前日期 declare v curr date varchar 10 mysql中宣告變數時,沒有類似於oracle裡面的rowtype方式 當前時間 declare ...