MySQL 5 0 新特性教程 儲存過程 三

2021-04-01 19:17:56 字數 2438 閱讀 8169

the new sql statements 新sql語句

variables 變數

在復合語句中宣告變數的指令是declare。

(1) example with two declare statements

兩個declare語句的例子

create procedure p8 ()

begin

declare a int;

declare b int;

set a = 5;

set b = 5;

insert into t values (a);

select s1 * a from t where s1 >= b;

end; // /* i won't call this */

在過程中定義的變數並不是真正的定義,你只是在begin/end塊內定義了而已(譯註:也就是形參)。

注意這些變數和會話變數不一樣,不能使用修飾符@你必須清楚的在begin/end塊中宣告變數和它們的型別。

變數一旦宣告,你就能在任何能使用會話變數、文字、列名的地方使用。

(2)example with no default clause and set statement

沒有預設子句和設定語句的例子

create procedure p9 ()

begin

declare a int /* there is no default clause */;

declare b int /* there is no default clause */;

set a = 5; /* there is a set statement */

set b = 5; /* there is a set statement */

insert into t values (a);

select s1 * a from t where s1 >= b;

end; // /* i won't call this */

有很多初始化變數的方法。如果沒有預設的子句,那麼變數的初始值為null。你可以在任何時候使用set語句給變數賦值。

(3)example with default clause

含有default子句的例子

create procedure p10 ()

begin

declare a, b int default 5;

insert into t values (a);

select s1 * a from t where s1 >= b;

end; //

我們在這裡做了一些改變,但是結果還是一樣的。在這裡使用了default子句來設定初始值,這就不需要把declare和set語句的實現分開了。

(4)example of call

呼叫的例子

mysql> call p10() //

+--------+

| s1 * a |

+--------+

| 25 |

| 25 |

+--------+

2 rows in set (0.00 sec)

query ok, 0 rows affected (0.00 sec)

結果顯示了過程能正常工作

(5) scope

作用域create procedure p11 ()

begin

declare x1 char(5) default 'outer';

begin

declare x1 char(5) default 'inner';

select x1;

end;

select x1;

end; //

現在我們來討論一下作用域的問題。例子中有巢狀的begin/end塊,當然這是合法的。同時包含兩個變數,名字都是x1,這樣也是合法的。內部的變數在其作用域內享有更高的優先權。當執行到end語句時,內部變數消失,此時已經在其作用域外,變數不再可見了,因此在儲存過程外再也不能找到這個宣告了的變數,但是你可以通過out引數或者將其值指派 給會話變數來儲存其值。

呼叫作用域例子的過程:

mysql> call p11()//

+-------+

| x1 |

+-------+

| inner |

+-------+

+-------+

| x1 |

+-------+

| outer |

+-------+

我們看到的結果時第乙個select語句檢索到最內層的變數,第二個檢索到第二層的變數

Mysql5 0 儲存過程

stored routines require the proc table in the mysql database.mysql.proc 心得 1.建立儲存過程之前,使用delimiter 來定義語句結束符,建立完成後,還原語句結束符 delimiter 由於mysql預設以 為分隔符,則過程...

Mysql5 0 儲存過程

stored routines require the proc table in the mysql database.mysql.proc 心得 1.建立儲存過程之前,使用delimiter 來定義語句結束符,建立完成後,還原語句結束符 delimiter 由於mysql預設以 為分隔符,則過程...

Mysql5 0 儲存過程

stored routines require the proc table in the mysql database.mysql.proc 心得 1.建立儲存過程之前,使用delimiter 來定義語句結束符,建立完成後,還原語句結束符 delimiter 由於mysql預設以 為分隔符,則過程...