一、變量的定義
目前創(chuàng)新互聯(lián)公司已為上1000+的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、網(wǎng)站托管維護(hù)、企業(yè)網(wǎng)站設(shè)計(jì)、淮上網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
mysql中變量定義用declare來(lái)定義一局部變量,該變量的使用范圍只能在begin...end
塊中使用,變量必須定義在復(fù)合語(yǔ)句的開(kāi)頭,并且是在其它語(yǔ)句之前,也可以同時(shí)申明多個(gè)變量,如果需要,可以使用default賦默認(rèn)值。
定義一個(gè)變量語(yǔ)法如下:
declare
var_name[,...]
type[default
value]看一個(gè)變量定義實(shí)例
declare
last
date;二、mysql存儲(chǔ)過(guò)程變量賦值
變量的賦值可直接賦值與查詢賦值來(lái)操作,直接賦值可以用set來(lái)操作,可以是常量或表達(dá)式如果下
復(fù)制代碼
代碼如下:
set
var_name=
[,var_name
expr]...給上面的last變量賦值方法如下
set
last
=
date_sub(
current_date(),interval
1
month);下面看通過(guò)查詢給變量賦值,要求查詢返回的結(jié)果必須為一行,具體操作如下
select
col
into
var_name[,...]
table_expr我們來(lái)通過(guò)查詢給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
$$
好了,這篇簡(jiǎn)單的存儲(chǔ)過(guò)程中變量的定義賦值教程就到這里了,下面我們會(huì)接著講關(guān)于myql存儲(chǔ)過(guò)程的條件的定義與處理。
以下是其它網(wǎng)友的補(bǔ)充
在MySQL的存儲(chǔ)過(guò)程中,可以使用變量,它用于保存處理過(guò)程中的值。
定義變量使用DECLARE語(yǔ)句,語(yǔ)法格式如下:
DECLARE
var_name[,...]
type
[DEFAULT
value]
其中,var_name為變量名稱,type為MySQL支持的任何數(shù)據(jù)類型,可選項(xiàng)[DEFAULT
value]為變量指定默認(rèn)值。一次可以定義多個(gè)同類型的變量,各變量名稱之間以逗號(hào)“,”隔開(kāi)。
定義與使用變量時(shí)需要注意以下幾點(diǎn):
◆
DECLARE語(yǔ)句必須用在DEGIN…END語(yǔ)句塊中,并且必須出現(xiàn)在DEGIN…END語(yǔ)句塊的最前面,即出現(xiàn)在其他語(yǔ)句之前。
◆
DECLARE定義的變量的作用范圍僅限于DECLARE語(yǔ)句所在的DEGIN…END塊內(nèi)及嵌套在該塊內(nèi)的其他DEGIN…END塊。
◆
存儲(chǔ)過(guò)程中的變量名不區(qū)分大小寫(xiě)。
定義后的變量采用SET語(yǔ)句進(jìn)行賦值,語(yǔ)法格式如下:
SET
var_name
=
expr
[,var_name
=
expr]
...
其中,var_name為變量名,expr為值或者返回值的表達(dá)式,可以使任何MySQL支持的返回值的表達(dá)式。一次可以為多個(gè)變量賦值,多個(gè)“變量名=值”對(duì)之間以逗號(hào)“,”隔開(kāi)。
例如:
復(fù)制代碼
代碼如下:
begin
declare
no
varchar(20);
declare
title
varchar(30);
set
no='101010',title='存儲(chǔ)過(guò)程中定義變量與賦值';
end
提示:存儲(chǔ)過(guò)程中所有的關(guān)鍵字也是不區(qū)分大小寫(xiě)的,如BEGIN可以寫(xiě)出begin。
在PHP、C++等語(yǔ)言里面可以使用變量,在存儲(chǔ)過(guò)程里面可以使用變量,SQL語(yǔ)句里面不能使用變量的。
不過(guò)你的要求可以用下面的一個(gè)SQL語(yǔ)句實(shí)現(xiàn):
insert into YYY表(字段1,字段2,字段3) SELECT 字段1,表達(dá)式2,常量3 FROM XXX表
注意:上面是兩個(gè)表,一般不允許同時(shí)對(duì)一個(gè)表進(jìn)行操作,如果是一個(gè)表,你可以考慮使用臨時(shí)表:
SELECT 字段1,表達(dá)式2,常量3 FROM XXX表 INTO TEMP TMP表;
insert into YYY表(字段1,字段2,字段3) SELECT * FROM TMP表;
一、局部變量
局部變量一般用在sql語(yǔ)句塊中,比如存儲(chǔ)過(guò)程的begin/end。其作用域僅限于該語(yǔ)句塊,在該語(yǔ)句塊執(zhí)行完畢后,局部變量就消失了。
局部變量一般用declare來(lái)聲明,可以使用default來(lái)說(shuō)明默認(rèn)值。
二、用戶變量
用戶變量的作用域要比局部變量要廣。用戶變量可以作用于當(dāng)前整個(gè)連接,但是當(dāng)當(dāng)前連接斷開(kāi)后,其所定義的用戶變量都會(huì)消失。
用戶變量使用如下(這里我們無(wú)須使用declare關(guān)鍵字進(jìn)行定義,可以直接這樣使用):
select @變量名
對(duì)用戶變量賦值有兩種方式,一種是直接用"="號(hào),另一種是用":="號(hào)。其區(qū)別在于使用set命令對(duì)用戶變量進(jìn)行賦值時(shí),兩種方式都可以使用;當(dāng)使用select語(yǔ)句對(duì)用戶變量進(jìn)行賦值時(shí),只能使用":="方式,因?yàn)樵趕elect語(yǔ)句中,"="號(hào)被看作是比較操作符。