mysql儲存過程,函式,觸發器例子

2021-04-22 09:37:51 字數 3197 閱讀 4594

1,分割乙個用"|||"間隔的字串的儲存過程.

create procedure  sp_insertjoke(lastindex int)

begin

declare i int;

set i=1;

while (i0) do

begin

set part1=mid(a,1,p-1);

insert myjoke(content) values(part1);

set a=substring(a,p+3);

set p=position('|||' in a);

end;

end while;

insert myjoke(content) values(a);  

set i=i+1;

end;

end while;

end;

2,網上乙個儲存過程分頁的例子.**自http://www.yiluo.net/?p=35),其中把字串當語句執行是prepare

create  procedure classlist(

in id int,

fldname varchar(100),

pagesize int,

pageindex int,

ordertype int,

strwhere varchar(2000),

out cou int

)begin

declare beginrow int;

declare sqlstr varchar(1000);

declare limittemp varchar(1000);

declare ordertemp varchar(1000);

declare v_classp int;

declare oo int;

declare done int default 0;

declare sql1 varchar(500) default 」 「;

declare sql2 varchar(200);

declare cur cursor for select shop_classid from shop_class where shop_parentclassid=id;

declare continue handler for sqlstate 『02000′ set done = 1;

set sql2=』select*from shop_class left join shop_main on shop_classid=shop_type_id where』;

select shop_parentclassid into v_classp from shop_class where shop_classid=id;

if(v_classp=0) then

open cur;

repeat

fetch cur into oo;

if not done then

set sql1=concat(』 or shop_classid=』,oo,sql1);

end if;

until done end repeat;

close cur;

set @sql=concat(sql2,substring(sql1,4,length(sql1)-3));

else

set @sql=concat(』select * from shop_main where shop_type_id=』,id);

end if;

set beginrow = (pageindex-1)*pagesize;

set limittemp = concat(』 limit 『,beginrow,』,',pagesize);

set ordertemp = concat(』 order by 『,fldname);

if ordertype = 0 then

set ordertemp = concat(ordertemp,』 asc 『);

else

set ordertemp = concat(ordertemp,』 desc 『);

end if;

set @sqlstring = concat(@sql,』 『,strwhere,ordertemp,limittemp);

prepare sqlstmt from @sqlstring;

execute sqlstmt;

deallocate prepare sqlstmt;

end

3,建立函式時必須有返回型別.

4,觸發器.

語法:

create trigger trigger_name trigger_time trigger_event on tbl_name  

for each row   

begin  

trigger_stmt  

end; 

create trigger trigger_name trigger_time trigger_event on tbl_name

for each row

begin

trigger_stmt

end;

大寫的為關鍵字

trigger_name:觸發器的名字,我常用的命名規則t_name_tablename_(b|a)(i|u|d),t:觸發器標識,name:英文名,tablename:表名,b(before):標識是觸發事件之前,a(after):標識觸發事件之後,i(insert):標識insert事件,u(update):標識update事件,d(delete):標識delete事件;

trigger_time:觸發時間(before或after)

trigger_event:事件名(insert或update或delete)

tbl_name:表名(必須是永久性表)

trigger_stmt:執行語句(可以是復合語名),使用別名old和new,能夠引用與觸發程式相關的表中的列。

例:create trigger tr_socre after insert on tal_name

for each row

begin

sql語句

end

MYSQL函式 儲存過程 觸發器

自定義函式是一種與儲存過程十分相似的過程式資料庫物件。它與儲存過程一樣,都是由 sql 語句和過程式語句組成的 片段,並且可以被應用程式和其他 sql 語句呼叫。自定義函式與儲存過程之間存在幾點區別 可以使用 create function 語句建立自定義函式。語法格式如下 create funct...

mysql儲存過程 儲存函式 觸發器 事件

前言 資料庫本身支援儲存過程,不同的資料庫管理系統對儲存過程的支援都不盡相同 從mysql5.0開始,mysql支援儲存過程 儲存函式 觸發器 事件 使用儲存過程的優點 儲存過程執行一次後,其執行的規劃就駐留在高速緩衝儲存器上,以後再次呼叫儲存過程時,只需從高速緩衝儲存器中呼叫以編譯好的二進位制 執...

MySQL 事件 觸發器 儲存過程

事件 檢視事件狀態 show variables like event scheduler 開啟事件 set global event scheduler on 觸發器語法 建立觸發器 delimiter 定義開始和結束的標誌 create trigger triggername after bef...