mysql中declare語句用法


mysql中的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; //  
在過程中定義的變量並不是真正的定義,你只是在BEGIN/END塊內定義了而已(譯注:也就是形參)。注意這些變量和會話變量不一樣,不能使用修飾符@你必須清楚的在BEGIN/END塊中聲明變量和它們的類型。變量一旦聲明,你就能在任何能使用會話變量、文字、列名的地方使用。 
(2)Example with no DEFAULT clause and SET statement 
沒有默認子句和設定語句的例子 
CREATE PROCEDURE p9 () 
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; //  
有很多初始化變量的方法。如果沒有默認的子句,那么變量的初始值為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語句檢索到最內層的變量,第二個檢索到第二層的變量

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM