mysql 儲存過程是從 mysql 5.0 開始增加的新功能。儲存過程的優點有一籮筐。不過最主要的還是執行效率和sql **封裝
。特別是 sql **封裝功能,如果沒有儲存過程,在外部程式訪問資料庫時(例如 php),要組織很多 sql 語句。特別是業務邏輯複雜
的時候,一大堆的 sql 和條件夾雜在 php **中,讓人不寒而慄。現在有了 mysql 儲存過程,業務邏輯可以封裝儲存過程中,這樣不僅容易維護,而且執行效率也高。
第一部分:建立乙個簡單的無參的儲存過程
1 用mysql客戶端登入
2 選擇資料庫
mysql>use test;
3 查詢當前資料庫有哪些儲存過程
mysql>show procedure status where db='test';
4 建立乙個簡單的儲存過程
mysql>create procedure hi() select 'hello';
5 儲存過程建立完畢,看怎麼呼叫它
mysql>call hi();
顯示結果
mysql> call hi(); +-------+ | hello | +-------+ | hello | +-------+ 1 row in set (0.00 sec) query ok, 0 rows affected (0.01 sec)
6 乙個簡單的儲存過程就成功了,這只是乙個演示,儲存過程可以一次執行多個sql語句
第二部分:建立乙個有兩個引數的儲存過程
一、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;
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 儲存過程引數,不能在引數名稱前加「@」,如:
「@aint」。下面的建立儲存過程語法在 mysql 中是錯誤的(在 sql server 中是正確的)。 mysql 儲存過程中的變數,不需要在變數名字前加「@」,雖然 mysql 客戶端使用者變數要加個「@」。
create procedure pr_add
(@a int, -- 錯誤
b int -- 正確
)3. mysql 儲存過程的引數不能指定預設值。
4. mysql 儲存過程不需要在 procedure body 前面加 「as」。而 sql server 儲存過程必須加 「as」 關鍵字。
create procedure pr_add
(a int,
b int
)as -- 錯誤,mysql 不需要 「as」
begin
mysql statement ...;
end;
5. 如果 mysql 儲存過程中包含多條 mysql 語句,則需要 begin end 關鍵字
。 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 儲存過程中的注釋。
declare c int; -- 這是單行 mysql 注釋 (注意 -- 後至少要有乙個空格)
if a is null then # 這也是個單行 mysql 注釋
set a = 0;
end if;
...end;
8. 不能在 mysql 儲存過程中使用 「return」 關鍵字。
set c = a + b;
select c as sum;
end;
9. 呼叫 mysql 儲存過程時候,需要在過程名字後面加「()」,即使沒有乙個引數,也需要「()」
call pr_no_param();
10. 因為 mysql 儲存過程引數沒有預設值
,所以在呼叫 mysql 儲存過程時候,不能省略引數。可以用null 來替代
。 call pr_add(10, null);
只為成功找方法,不為失敗找理由!
Oracle中儲存過程的建立和呼叫
1.oracle中建立儲存過程的格式如下 create or replace procedure 過程名 引數1 方式1 資料型別1 引數2 方式2 資料型別2 is as begin pl sql end 其中引數in表示輸入,out表示輸出,in out 表示既可以輸入也可以輸出 2.呼叫儲存過...
mysql中儲存過程
delimiter,簡單解釋下這個命令的用途,在mysql中每行命令都是用 結尾,回車後自動執行,在儲存過程中 往往不代表指令結束,馬上執行,而delimiter原本就是 的意思,因此用這個命令轉換一下 為 這樣只有收到 才認為指令結束可以執行 檢視myql中已經存在的儲存過程 show proce...
mysql中儲存過程
儲存過程,其本質還是函式 但其規定 不能有返回值 說明 1,in 用於設定該變數是用來 接收實參資料 的,即 傳入 預設不寫,就是in 2,out 用於設定該變數是用來 儲存儲存過程中的資料 的,即 傳出 即函式中必須對它賦值 3,inout 是in和out的結合,具有雙向作用 4,對於,out和i...