變量總體分為兩大類:procedure內(nèi)部和非procedure內(nèi)部;

在成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營(yíng)銷成為有效果、有回報(bào)的無(wú)錫營(yíng)銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。
procedure內(nèi)用declare 聲明,作用域僅限于聲明的procedure。
另一類就是通常意義上的變量,分為全局(global)和局部(session),用select 或者 set聲明,作用域分別是全局和回話級(jí)別。
下面是一個(gè)簡(jiǎn)單的 存儲(chǔ)過程的例子.
DECLARE v_index INT;
定義一個(gè) 名稱為 v_index 的變量, 類型為 INT
MYSQL 變量定義應(yīng)該只能在 存儲(chǔ)過程, 函數(shù)里面定義.
不像 Oracle / SQL Server , 一個(gè) BEGIN / END 里面就可以定義/執(zhí)行了。
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)
一般沒有這種做法的, 列表名或者說字段名都是在設(shè)計(jì)表的時(shí)候固定設(shè)計(jì)好了, 如果動(dòng)態(tài)添加的話指不定什么時(shí)候表就因?yàn)樽侄翁喑霈F(xiàn)什么不可預(yù)測(cè)的問題了來(lái)
不過一般你可以變相使用行做動(dòng)態(tài)數(shù)據(jù), 例如設(shè)計(jì)一個(gè)表, 字段有id(自增), field_name(存儲(chǔ)列表名), filed_value(存儲(chǔ)列表值), 達(dá)成同樣的目的
到時(shí)候只要插入相應(yīng)的行數(shù)據(jù)就可以了, 而不必改變表結(jié)構(gòu)
在PHP、C++等語(yǔ)言里面可以使用變量,在存儲(chǔ)過程里面可以使用變量,SQL語(yǔ)句里面不能使用變量的。
不過你的要求可以用下面的一個(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表;
一、變量的定義
mysql中變量定義用declare來(lái)定義一局部變量,該變量的使用范圍只能在begin...end
塊中使用,變量必須定義在復(fù)合語(yǔ)句的開頭,并且是在其它語(yǔ)句之前,也可以同時(shí)申明多個(gè)變量,如果需要,可以使用default賦默認(rèn)值。
定義一個(gè)變量語(yǔ)法如下:
declare
var_name[,...]
type[default
value]看一個(gè)變量定義實(shí)例
declare
last
date;二、mysql存儲(chǔ)過程變量賦值
變量的賦值可直接賦值與查詢賦值來(lái)操作,直接賦值可以用set來(lái)操作,可以是常量或表達(dá)式如果下
復(fù)制代碼
代碼如下:
set
var_name=
[,var_name
expr]...給上面的last變量賦值方法如下
set
last
=
date_sub(
current_date(),interval
1
month);下面看通過查詢給變量賦值,要求查詢返回的結(jié)果必須為一行,具體操作如下
select
col
into
var_name[,...]
table_expr我們來(lái)通過查詢給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ǔ)過程中變量的定義賦值教程就到這里了,下面我們會(huì)接著講關(guān)于myql存儲(chǔ)過程的條件的定義與處理。
以下是其它網(wǎng)友的補(bǔ)充
在MySQL的存儲(chǔ)過程中,可以使用變量,它用于保存處理過程中的值。
定義變量使用DECLARE語(yǔ)句,語(yǔ)法格式如下:
DECLARE
var_name[,...]
type
[DEFAULT
value]
其中,var_name為變量名稱,type為MySQL支持的任何數(shù)據(jù)類型,可選項(xiàng)[DEFAULT
value]為變量指定默認(rèn)值。一次可以定義多個(gè)同類型的變量,各變量名稱之間以逗號(hào)“,”隔開。
定義與使用變量時(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ǔ)過程中的變量名不區(qū)分大小寫。
定義后的變量采用SET語(yǔ)句進(jìn)行賦值,語(yǔ)法格式如下:
SET
var_name
=
expr
[,var_name
=
expr]
...
其中,var_name為變量名,expr為值或者返回值的表達(dá)式,可以使任何MySQL支持的返回值的表達(dá)式。一次可以為多個(gè)變量賦值,多個(gè)“變量名=值”對(duì)之間以逗號(hào)“,”隔開。
例如:
復(fù)制代碼
代碼如下:
begin
declare
no
varchar(20);
declare
title
varchar(30);
set
no='101010',title='存儲(chǔ)過程中定義變量與賦值';
end
提示:存儲(chǔ)過程中所有的關(guān)鍵字也是不區(qū)分大小寫的,如BEGIN可以寫出begin。
在select 語(yǔ)句中賦值給用戶變量的語(yǔ)法是 @ var_name := value ,這里的var_name 是變量名,value是正檢索的值.
1:變量可以用在以后語(yǔ)句中表達(dá)式可用的任何地方,例如where字句或者insert 語(yǔ)句中。
例如select @id :=cust_id from customers where cust_id='customer name';
delete from orders where cust_id = @id;
2:變量的另一個(gè)用途是保存在一個(gè)auto_increment列的表中 插入新的一行后last_insert_id()的結(jié)果
select @last_id :=Last_INSERT_ID();
LAST_INSERT_ID()返回新的AUTO_INCREMENT列值,通過將其保存在變量中,你可以在之后的語(yǔ)句中多次引用該值。
即使發(fā)起其他的語(yǔ)句創(chuàng)建他們自身的atuo_increment值,從而改變了last_insert_id()返回的值
3:用戶變量擁有單一的值,如果使用返回多行的語(yǔ)句來(lái)將值賦給一個(gè)變量,那么只有最后一行的值被賦給了該變量。
4:要將一個(gè)變量顯示地設(shè)為一個(gè)特定值,使用set語(yǔ)句,set語(yǔ)法可以使用:=或者=來(lái)進(jìn)行賦值
5:set也可以用來(lái)將一個(gè)select的結(jié)果賦給一個(gè)變量.
分享題目:mysql新建變量怎么寫,MySQL定義變量
網(wǎng)址分享:http://chinadenli.net/article4/dsegpoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站、服務(wù)器托管、用戶體驗(yàn)、定制網(wǎng)站、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)