天天看點

mysql存儲過程,存儲函數

一:存儲過程

存儲程式包括存儲函數和存儲過程.存儲過程有它獨特的優勢,存儲過程大大地減少了業務系統與資料庫的互動,一定程度降低了業務系統與資料庫的耦合.還有執行效率高,編寫友善,功能強大等等,但一定要注意其應用場景。一般使用與業務邏輯簡單穩定的場景,不适用業務邏輯複雜經常變換的場景.如果表換個結構,要改很多存儲過程,各有利弊吧.

存儲過程基本文法:

CREATE PROCEDURE pro_name([IN|OUT|INOUT] param_name type)

[characteristics...]continue_body

pro_name代表存儲過程名稱

in表示輸入參數,out表示輸出參數,inout既可以輸入又可以輸出,param_name代表參數名稱,type表示參數類型.

characteristics表示存儲過程特性(規定一些注釋資訊,誰來維權,存儲結果判斷等...),

continue_body是sql代碼的内容.

建立存儲過程:統計所有員工數量的存儲過程

CREATE PROCEDURE pro1(OUT param1 int)

BEGIN

SELECT COUNT(*)INTO param1 from employee;

END;

調用存儲過程

CALL pro1(@param1);

SELECT @param1

檢視存儲過程

SHOW PROCEDURE STATUS LIKE 'p%';

SHOW CREATE PROCEDURE pro1;

修改存儲過程:

ALTER {PROCEDURE | FUNCTION}pro_name[characteristics...]語句隻能改變存儲過程的特征,不能修改過程的參數以及過程體。

如果想做這樣的修改,必須先使用DROP PROCEDURE 删除過程,然後使用and CREATE PROCEDURE重建過程.

删除存儲過程

DROP PROCEDURE IF EXISTS db_name.produce_name;(就是資料庫.存儲過程名字)

二:存儲函數

存儲函數建立基本文法

CREATE FUNCTION func_name([func_parameter])

RETURNS type

[characteristics...]continue_body

建立根據id查詢員工名稱

CREATE FUNCTION func_test(parma1 INT)

return varchar2

is v_name nvarchar2;

BEGIN

 select into v_name from employee where e_no=param1;

return v_name;

END;

存儲函數檢視

show FUNCTION STATUS LIKE 'func%'

SHOW CREATE FUNCTION mytest.func_test;

存儲函數使用

select function_name(參數);

存儲函數修改:

alter function function_name 

[characteristics...]

删除存儲函數

DROP function IF EXISTS db_name.function_name;(就是資料庫.存儲函數名字)