mysql 儲存過程是從 mysql 5.0 新功能。儲存過程的長處有一籮筐。只是最基本的還是執行效率和sql **封裝。
特別是 sql **封裝功能,假設沒有儲存過程,在外部程式訪問資料庫時(比如 php),要組織非常多 sql 語句。特別是業務邏輯複雜的時候,一大堆的 sql 和條件夾雜在 php **中,讓人不寒而慄。如今有了 mysql 儲存過程,業務邏輯能夠封裝儲存過程中,這樣不僅easy維護,並且執行效率也高。
一、mysql 建立儲存過程
「pr_add」 是個簡單的 mysql 儲存過程。這個儲存過程有兩個 int 型別的輸入引數 「a」、「b」,返回這兩個引數的和。
drop procedure if exists pr_add;
-- 計算兩個數之和
create procedure pr_add
(a int,
b int
)begin
declare c int;
if a is null then
set a = 0;
end if;
if b is null then
set b = 0;
end if;
set c = a + b;
select c as sum;
/*return c;- 不能在 mysql 儲存過程中使用。return 僅僅能出如今函式中。
/end;
二、呼叫 mysql 儲存過程
call pr_add(10, 20);
執行 mysql 儲存過程,儲存過程引數為 mysql 使用者變數。
set @a = 10;
set @b = 20;
call pr_add(@a, @b);
三、mysql 儲存過程特點
建立 mysql 儲存過程的簡單語法為:
create procedure 儲存過程名字()
([in|out|inout] 引數 datatype
)begin
mysql 語句;
end;
mysql 儲存過程引數假設不顯式指定「in」、「out」、「inout」。則默覺得「in」。習慣上。對於是「in」 的引數,我們都不會顯式指定。
1. mysql 儲存過程名字後面的「()」是必須的,即使沒有乙個引數。也須要「()」
2. mysql 儲存過程引數,不能在引數名稱前加「@」。如:mailto:%e2%80%9c@a int」。以下的建立儲存過程語法在 mysql 中是錯誤的(在 sql server 中是正確的)。 mysql 儲存過程中的變數,不須要在變數名字前加「@」,儘管 mysql client使用者變數要加個「@」。
create procedure pr_add
(@a int,- 錯誤
b int - 正確
)3. mysql 儲存過程的引數不能指定預設值。
4. mysql 儲存過程不須要在 procedure body 前面加 「as」。而 sql server 儲存過程必須加 「as」 keyword。
create procedure pr_add
(a int,
b int
)as - 錯誤,mysql 不須要 「as」
begin
mysql statement ...;
end;
5. 假設 mysql 儲存過程中包括多條 mysql 語句,則須要 begin end keyword。
create procedure pr_add
(a int,
b int
)begin
mysql statement 1 ...;
mysql statement 2 ...;
end;
6. mysql 儲存過程中的每條語句的末尾。都要加上分號 「;」
...declare c int;
if a is null then
set a = 0;
end if;
...end;
7. mysql 儲存過程中的凝視。
/*這是個
多行 mysql 凝視。
/declare c int; - 這是單行 mysql 凝視 (注意- 後至少要有乙個空格)
if a is null then 這也是個單行 mysql 凝視
set a = 0;
end if;
...end;
8. 不能在 mysql 儲存過程中使用 「return」 keyword。
set c = a + b;
select c as sum;
/*return c;- 不能在 mysql 儲存過程中使用。return 僅僅能出如今函式中。
/end;
9. 呼叫 mysql 儲存過程時候,須要在過程名字後面加「()」,即使沒有乙個引數,也須要「()」
call pr_no_param();
10. 由於 mysql 儲存過程引數沒有預設值。所以在呼叫 mysql 儲存過程時候,不能省略引數。能夠用 null 來替代。
call pr_add(10, null);
乙個儲存過程
create or replace package abc zys is procedure daily census end abc zys 建乙個包,包中有儲存過程daily census。不涉及任何引數。create or replace package body abc zys is pro...
乙個儲存過程
首先是建立儲存過程.drop procedure if exists externalcalltocomplete delimiter create procedure externalcalltocomplete begin drop table if exists temp1 create ta...
mysql儲存過程之乙個簡單的儲存過程(一)
宣告分隔符 delimiter 建立儲存過程 create procedure 儲存過程名稱 引數列表 開始執行儲存過程 begin 儲存過程的邏輯 select from user 結束儲存過程 end 分隔符 重置分隔符 delimiter 案例如下 delimiter create proce...