儲存過程和函式是在資料庫中定義一些sql語句的集合,然後直接呼叫這些儲存過程和函式來執行已經定義好的sql語句。儲存過程和函式可以避免開發人員重複的編寫相同的sql語句。而且,儲存過程和函式是在mysql伺服器中儲存和執行的,可以減少客戶端和伺服器端的資料傳輸。
一.建立儲存過程
create procedure sp_name()
begin
.........
end二.呼叫儲存過程
1.基本語法:call sp_name()
注意:儲存過程名稱後面必須加括號,哪怕該儲存過程沒有引數傳遞
三.刪除儲存過程
1.基本語法:
drop procedure sp_name;
2.注意事項
(1)不能在乙個儲存過程中刪除另乙個儲存過程,只能呼叫另乙個儲存過程
四.其他常用命令
1.show procedure status
顯示資料庫中所有儲存的儲存過程基本資訊,包括所屬資料庫,儲存過程名稱,建立時間等
2.show create procedure sp_name
顯示某乙個mysql儲存過程的詳細資訊
mysql儲存過程的引數用在儲存過程的定義,共有三種引數型別,in,out,inout
create procedure|function([[in |out |inout ] 引數名 資料類形...])
in 輸入引數
表示該引數的值必須在呼叫儲存過程時指定,在儲存過程中修改該引數的值不能被返回,為預設值
out 輸出引數
該值可在儲存過程內部被改變,並可返回
inout 輸入輸出引數
呼叫時指定,並且可被改變和返回
in引數例子:
mysql>delimiter //
mysql>create procedure sp_demo_in_parameter(in p_in int)
->begin
->select p_in; /*查詢輸入引數*/
->set p_in=2; /*修改*/
->select p_in; /*檢視修改後的值*/
->end;
mysql>delimiter ;
執行結果:
以上可以看出,p_in雖然在儲存過程中被修改,但並不影響@p_in的值
out引數例子
建立:mysql>delimiter //
mysql> create procedure sp_demo_out_parameter(out p_out int)
->begin
->select p_out; /*檢視輸出引數*/
->set p_out=2; /*修改引數值*/
->select p_out; /*看看有否變化*/
->end;
mysql>delimiter ;
執行結果:
/*未被定義,返回null*/
inout引數例子:
mysql>delimiter //
mysql> create procedure sp_demo_inout_parameter(inout p_inout int)
->begin
->select p_inout;
->set p_inout=2;
->select p_inout;
->end;
mysql>delimiter ;
執行結果:
附:函式庫
mysql儲存過程基本函式包括:字串型別,數值型別,日期型別
一、字串類
charset(str) //返回字串字符集
concat (string2 [,… ]) //連線字串
instr (string ,substring ) //返回substring首次在string**現的位置,不存在返回0
lcase (string2 ) //轉換成小寫
left (string2 ,length ) //從string2中的左邊起取length個字元
length (string ) //string長度
load_file (file_name ) //從檔案讀取內容
locate (substring , string [,start_position ] ) 同instr,但可指定開始位置
lpad (string2 ,length ,pad ) //重複用pad加在string開頭,直到字串長度為length
ltrim (string2 ) //去除前端空格
repeat (string2 ,count ) //重複count次
replace (str ,search_str ,replace_str ) //在str中用replace_str替換search_str
rpad (string2 ,length ,pad) //在str後用pad補充,直到長度為length
rtrim (string2 ) //去除後端空格
strcmp (string1 ,string2 ) //逐字元比較兩字串大小,
substring (str , position [,length ]) //從str的position開始,取length個字元,
注:mysql中處理字串時,預設第乙個字元下標為1,即引數position必須大於等於1
mysql> select substring(』abcd』,0,2);
+———————–+
| substring(』abcd』,0,2) |
+———————–+
| |+———————–+
1 row in set (0.00 sec)
mysql> select substring(』abcd』,1,2);
+———————–+
| substring(』abcd』,1,2) |
+———————–+
| ab |
+———————–+
1 row in set (0.02 sec)
trim([[both|leading|trailing] [padding] from]string2) //去除指定位置的指定字元
ucase (string2 ) //轉換成大寫
right(string2,length) //取string2最後length個字元
space(count) //生成count個空格
儲存過程和儲存函式
1 mysql 在操作子程式時,由於需要使用分號 所以要使用delimiter先重新定義分界符為 以下 包含的內容表示注釋 delimiter 使用delimiter 把定界符由 設定為 注意 delimiter 和 之間的空格。1 建立子程式 儲存過程和儲存函式的統稱 create procedu...
儲存過程和儲存函式
儲存過程 stored procedure 是一組為了完成特定功能的sql 語句集,經編譯後儲存在資料庫。中使用者通過指定儲存過程的名字並給出引數 如果該儲存過程帶有引數 來執行它 優點 1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而 一般sql 語句每執行一次就編譯一次,...
儲存過程和函式
子程式 命名的pl sql塊 的各個部分 申明部分,可執行部分,異常部分 可選 子程式的分類 過程 執行某些操作 函式 執行操作並返回結果 過程引數的三種模式 in,out,in out 建立過程的語法 create or replace procedure param list is as beg...