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預設以 為分隔符,則過程...