重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
變量總體分為兩大類:procedure內部和非procedure內部;
在成都網站設計、做網站中從網站色彩、結構布局、欄目設置、關鍵詞群組等細微處著手,突出企業的產品/服務/品牌,幫助企業鎖定精準用戶,提高在線咨詢和轉化,使成都網站營銷成為有效果、有回報的無錫營銷推廣。創新互聯專業成都網站建設十年了,客戶滿意度97.8%,歡迎成都創新互聯客戶聯系。
procedure內用declare 聲明,作用域僅限于聲明的procedure。
另一類就是通常意義上的變量,分為全局(global)和局部(session),用select 或者 set聲明,作用域分別是全局和回話級別。
下面是一個簡單的 存儲過程的例子.
DECLARE v_index INT;
定義一個 名稱為 v_index 的變量, 類型為 INT
MYSQL 變量定義應該只能在 存儲過程, 函數里面定義.
不像 Oracle / SQL Server , 一個 BEGIN / END 里面就可以定義/執行了。
mysql DELIMITER //
mysql CREATE PROCEDURE TestWhile()
- BEGIN
- DECLARE v_index INT;
-
- SET v_index = 0;
-
- WHILE v_index 5 DO
- SET v_index = v_index + 1;
- SELECT v_index;
- END WHILE;
-
- END//
Query OK, 0 rows affected (0.00 sec)
一般沒有這種做法的, 列表名或者說字段名都是在設計表的時候固定設計好了, 如果動態添加的話指不定什么時候表就因為字段太多出現什么不可預測的問題了來
不過一般你可以變相使用行做動態數據, 例如設計一個表, 字段有id(自增), field_name(存儲列表名), filed_value(存儲列表值), 達成同樣的目的
到時候只要插入相應的行數據就可以了, 而不必改變表結構
在PHP、C++等語言里面可以使用變量,在存儲過程里面可以使用變量,SQL語句里面不能使用變量的。
不過你的要求可以用下面的一個SQL語句實現:
insert into YYY表(字段1,字段2,字段3) SELECT 字段1,表達式2,常量3 FROM XXX表
注意:上面是兩個表,一般不允許同時對一個表進行操作,如果是一個表,你可以考慮使用臨時表:
SELECT 字段1,表達式2,常量3 FROM XXX表 INTO TEMP TMP表;
insert into YYY表(字段1,字段2,字段3) SELECT * FROM TMP表;
一、變量的定義
mysql中變量定義用declare來定義一局部變量,該變量的使用范圍只能在begin...end
塊中使用,變量必須定義在復合語句的開頭,并且是在其它語句之前,也可以同時申明多個變量,如果需要,可以使用default賦默認值。
定義一個變量語法如下:
declare
var_name[,...]
type[default
value]看一個變量定義實例
declare
last
date;二、mysql存儲過程變量賦值
變量的賦值可直接賦值與查詢賦值來操作,直接賦值可以用set來操作,可以是常量或表達式如果下
復制代碼
代碼如下:
set
var_name=
[,var_name
expr]...給上面的last變量賦值方法如下
set
last
=
date_sub(
current_date(),interval
1
month);下面看通過查詢給變量賦值,要求查詢返回的結果必須為一行,具體操作如下
select
col
into
var_name[,...]
table_expr我們來通過查詢給v_pay賦值。
create
function
get
_cost(p_custid
int,p_eff
datetime)
return
decimal(5,2)
deterministic
reads
sql
data
begin
declare
v_pay
decimail(5,2);
select
ifnull(
sum(pay.amount),0)
into
vpay
from
payment
where
pay.payd=p_eff
and
pay.custid=pid
reutrn
v_rent
+
v_over
-
v_pay;
end
$$
好了,這篇簡單的存儲過程中變量的定義賦值教程就到這里了,下面我們會接著講關于myql存儲過程的條件的定義與處理。
以下是其它網友的補充
在MySQL的存儲過程中,可以使用變量,它用于保存處理過程中的值。
定義變量使用DECLARE語句,語法格式如下:
DECLARE
var_name[,...]
type
[DEFAULT
value]
其中,var_name為變量名稱,type為MySQL支持的任何數據類型,可選項[DEFAULT
value]為變量指定默認值。一次可以定義多個同類型的變量,各變量名稱之間以逗號“,”隔開。
定義與使用變量時需要注意以下幾點:
◆
DECLARE語句必須用在DEGIN…END語句塊中,并且必須出現在DEGIN…END語句塊的最前面,即出現在其他語句之前。
◆
DECLARE定義的變量的作用范圍僅限于DECLARE語句所在的DEGIN…END塊內及嵌套在該塊內的其他DEGIN…END塊。
◆
存儲過程中的變量名不區分大小寫。
定義后的變量采用SET語句進行賦值,語法格式如下:
SET
var_name
=
expr
[,var_name
=
expr]
...
其中,var_name為變量名,expr為值或者返回值的表達式,可以使任何MySQL支持的返回值的表達式。一次可以為多個變量賦值,多個“變量名=值”對之間以逗號“,”隔開。
例如:
復制代碼
代碼如下:
begin
declare
no
varchar(20);
declare
title
varchar(30);
set
no='101010',title='存儲過程中定義變量與賦值';
end
提示:存儲過程中所有的關鍵字也是不區分大小寫的,如BEGIN可以寫出begin。
在select 語句中賦值給用戶變量的語法是 @ var_name := value ,這里的var_name 是變量名,value是正檢索的值.
1:變量可以用在以后語句中表達式可用的任何地方,例如where字句或者insert 語句中。
例如select @id :=cust_id from customers where cust_id='customer name';
delete from orders where cust_id = @id;
2:變量的另一個用途是保存在一個auto_increment列的表中 插入新的一行后last_insert_id()的結果
select @last_id :=Last_INSERT_ID();
LAST_INSERT_ID()返回新的AUTO_INCREMENT列值,通過將其保存在變量中,你可以在之后的語句中多次引用該值。
即使發起其他的語句創建他們自身的atuo_increment值,從而改變了last_insert_id()返回的值
3:用戶變量擁有單一的值,如果使用返回多行的語句來將值賦給一個變量,那么只有最后一行的值被賦給了該變量。
4:要將一個變量顯示地設為一個特定值,使用set語句,set語法可以使用:=或者=來進行賦值
5:set也可以用來將一個select的結果賦給一個變量.