MYSQL中儲存過程的建立,呼叫及語法

2021-08-08 13:43:57 字數 3073 閱讀 8658

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...