mysql教程存儲過程是帶參數的存儲過程(動態執行sql語句),該mysql存儲過程是根據用戶輸入的條件和排序方式查詢用戶的信息,排序條件可以沒有調用方式:
mysql 5.0
新特性教程是為需要了解5.0版本新特性的mysql老用戶而寫的。簡單的來說是介紹了“存儲過程、觸發器、視圖、信息架構視圖”,
call getusersdynamic('age<=30','');
/********動態查詢用戶的信息********/ create procedure getusersdynamic(wherecondition varchar(500),orderbyexpress varchar(100)) begin declare stmt varchar(2000); if length(orderbyexpress)>0 then begin set @sqlstr=concat('select id,name,password,age,getdate(adddate) as adddate from users where ',wherecondition,' order by ',orderbyexpress); end; else begin set @sqlstr=concat('select id,name,password,age,getdate(adddate) as adddate from users where ',wherecondition); end; end if; prepare stmt from @sqlstr; execute stmt; end; getdate()是一個自定義的函數,作用是返回日期的短格式
create definer=`root`@`localhost` function `getdate`($date datetime) returns varchar(50) charset latin1 return date_format($date,'%y-%m-%d'); 動態插入數據的mysql存儲過程,(注意四個單引號表示一個一引號):
create definer=`root`@`localhost` procedure `insertuser`(in name2 varchar(50),in password2 varchar(32),in age2 int,in adddate2 datetime) begin declare stmt varchar(2000); set @sqlstr=concat('insert into users(name,password,age,adddate) values('); set @sqlstr=concat(@sqlstr,'''',name2,'''',',','''',password2,'''',',',age2,',','''',adddate2,'''',')'); prepare stmt from @sqlstr; execute stmt; end;
在這裡舉個例子:mysql> drop function f;query ok, 0 rows affected (0.00 sec)
如果實例比較大,則需要在某些行和段落間加注釋,同時我會用將“<--”符號放在頁面的右邊以表示強調。
例如:
mysql> create procedure p ()
-> begin
-> /* this procedure does nothing */ <--
-> end;//query ok, 0 rows affected (0.00 sec)
有時候我會將例子中的"mysql>"和"->"這些系統顯示去掉,你可以直接將代碼復制到mysql客戶端程序中(如果你現在所讀的
不是電子版的,可以在mysql.com網站下載相關腳本)所以的例子都已經在suse 9.2 linux、mysql 5.0.3公共版上測試通過。
在您閱讀本書的時候,mysql已經有更高的版本,同時能支持更多os了,包括windows,sparc,hp-ux。因此這裡的例子將能正常的運行在您的電腦上。但如果運行仍然出現故障,可以咨詢你認識的資深mysql用戶,以得到長久的支持和幫助。
a definition and an example 定義及實例
定義及實例存儲過程是一種存儲在書庫中的程序(就像正規語言裡的子程序一樣),准確的來說,mysql支持的“routines(例程)”有兩種:
一是我們說的存儲過程,二是在其他sql語句中可以返回值的函數(使用起來和mysql預裝載的函數一樣,如pi())。我在本書裡面會更經常使用存儲過
程,因為這是我們過去的習慣,相信大家也會接受。
一個存儲過程包括名字,參數列表,以及可以包括很多sql語句的sql語句集。
在這裡對局部變量,異常處理,循環控制和if條件句有新的語法定義。
下面是一個包括存儲過程的實例聲明:(譯注:為了方便閱讀,此後的程序不添任何中文注釋)
create procedure procedure1 /* name存儲過程名*/
(in parameter1 integer) /* parameters參數*/
begin /* start of block語句塊頭*/
declare variable1 char(10); /* variables變量聲明*/
if parameter1 = 17 then /* start of if if條件開始*/
set variable1 = 'birds'; /* assignment賦值*/
else
set variable1 = 'beasts'; /* assignment賦值*/
end if; /* end of if if結束*/
insert into table1 values (variable1);/* statement sql語句*/
end /* end of block語句塊結束*/