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語句檢索到最內層的變數,第二個檢索到第二層的變數
SQL中declare申明變數
在sql語句中加入變數。declare local variable data type 宣告時須要指定變數的型別,能夠使用set和select對變數進行賦值,在sql語句中就能夠使用 local variable來呼叫變數 宣告中能夠提供值,否則宣告之後全部變數將初始化為null。比如 decla...
SQL中的declare用法
平時寫sql查詢 儲存過程都是憑著感覺來,沒有 過sql的具體語法,一直都是按c 那一套往sql上模仿,前幾天專案中碰到乙個問題引起了我對declare定義變數的作用域的興趣。大家都知道c 中的區域性變數,在if中如果我們定義乙個變數的話他的作用到if結束為止,if外是不識別這個變數的,else裡都...
php中declare的作用詳解
一般用法是 declare ticks n 拿declare ticks 1 來說,這句主要作用有兩種 1 zend引擎每執行1條低階語句就去執行一次 register tick function 註冊的函式。可以粗略的理解為每執行一句php 例如 num 1 就去執行下已經註冊的tick函式。乙個...