參數聲明
MySQL中的變量主要有局部變量和會話變量兩種,局部變量只在定義該局部變量的begin…end內有效,會話變量在整個存儲過程范圍內有效。
1.局部變量
局部變量以關鍵字declare聲明,後跟變量名和變量類型,示例如下:
declare a int
當然在聲名局部變量時也可以用關鍵字default為變量指定默認值,示例如下:
declare a int default 10
下述代碼為MySQL存儲過程中局部變量的定義及使用方法。在該例中,分別在內層和外層 begin…end塊中都定義同名的變量x,按照語句從上到下執行的順序,如果變量x在整個程序中都有效,則最終結果應該都為inner,但真正的輸出結果卻不同,這說明在內部begin…end塊中定義的變量只在該塊內有效。該例子說明局部變量只在某個begin…end塊內有效。
MySQL>delimiter //
MySQL> create procedure p1()
-> begin
->declare x char(10) default ’ outer’;
->begin
->declare x char(10) default ’inner ’;
->select x;
->end;
->select x;
->end;//
Query ok, 0 rows affected (0.01 sec)
MySQL>call p1()//
+---------+
| x |
+---------+
| inner |
+---------+
1 row in set (0.00 sec)
+---------+
| x |
+---------+
| outer |
+---------+
2.變量
MySQL中的會話變量不必聲明即可使用,會話變量在整個過程中有效,會話變量名以字符“@”作為起始字符。下述代碼為會話變量的使用方法。在該例中,分別在內部和外部begin…end塊中都定義了同名的會話變量@t,並且最終輸出結果相同,說明會話變量的作用范圍為整個程序。
本教程來自http://www.isstudy.com
MySQL>delimiter //
MySQL> create procedure p2()
-> begin
->set @t=1;
->begin
->set @t=2;
->select @t;
->end;
->select @t;
->end;//
Query ok, 0 rows affected (0.01 sec)
MySQL>call p2()//
+---------+
| @t |
+---------+
| 2 |
+---------+
1 row in set (0.00 sec)
+---------+
| @t |
+---------+
| 2 |
+---------+