mysql存儲過程定義數組
一、變數的定義
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。
B. mysql中怎麼存儲數組
mysql中不能存儲數組,但是可以通過傳入的字元串截取成多個字元然後傳入到臨時表中,然後使用游標或者直接關聯表過濾數據來儲存。
具體步驟如下所示:
1、創建資料庫,就如下圖所示一樣。
C. mysql如何定義數組變數
$arr = new Array("1","2","3");
$sql = "select * from tab where id>".$arr[0]." and id<>".$arr[2];
簡單舉了個例子
D. mysql 存儲過程處理array
如果你的array不需要處理,直接就可以insert into
例如:
INSERTINTO db1_name (field1,field2) SELECT field1,field2 FROM db2_name
這種格式不能加values
E. mysql中的存儲過程能返回數組么
mysql中要獲得存儲過程的返回值,可以增加一個out參數,用來返回。
mysql中存儲過程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUTresult INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;
SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN
SET result = 1;-- 已存在
SELECT
result;
ELSE
IF @c_count_a > 0 THEN
IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN
IF @isdead_a = 1 THEN
INSERT INTO t_user_voucher (userid, voucherid, isdead)
VALUES
(userid, voucherid, 1);
UPDATE t_voucher SET c_count = c_count-1 where id = voucherid;
SET result = 0;-- 成功
END;
下面是調用並返回結果:
F. 淺談MySQL存儲過程中declare和set定義變數的區別
MySQL存儲過程中,定義變數有兩種方式:
1.使用set或select直接賦值,變數名以 @ 開頭.
例如:set @var=1;
可以在一個會話的任何地方聲明,作用域是整個會話,稱為會話變數。
2.以 DECLARE 關鍵字聲明的變數,只能在存儲過程中使用,稱為存儲過程變數,例如:
DECLARE var1 INT DEFAULT 0;
主要用在存儲過程中,或者是給存儲傳參數中。
兩者的區別是:
在調用存儲過程時,以DECLARE聲明的變數都會被初始化為 NULL。而會話變數(即@開頭的變數)則不會被再初始化,在一個會話內,只須初始化一次,之後在會話內都是對上一次計算的結果,就相當於在是這個會話內的全局變數。
在存儲過程中,使用動態語句,預處理時,動態內容必須賦給一個會話變數。
例:
set @v_sql= sqltext;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
G. MySQL存儲過程中declare和set定義變數的區別
在存儲過程中常看到declare定義的變數和@set定義的變數。簡單的來說,declare定義的類似是局部變數,@set定義的類似全局變數。
1、declare定義的變數類似java類中的局部變數,僅在類中生效。即只在存儲過程中的begin和end之間生效。
2、@set定義的變數,叫做會話變數,也叫用戶定義變數,在整個會話中都起作用(比如某個應用的一個連接過程中),即這個變數可以在被調用的存儲過程或者代碼之間共享數據。如何理解呢?可以看下面這個簡單例子,很好理解。
(1)先執行下面腳本,創建一個存儲過程,分別有declare形式的變數和@set形式的變數
DROP PROCEDURE IF EXISTS temp;
DELIMITER //CREATE PROCEDURE temp()BEGIN
DECLARE a INT DEFAULT 1; SET a=a+1; SET @b=@b+1; SELECT a,@b;END//DELIMITER ;
(2)接著為b變數初始化。
SET @b=1;
(3)然後重復調用這個存儲過程。
CALL temp();
(4)會發現a的值不改變,而b的值會一直增加。
所以,總結起來就是開頭那句話,declare定義的類似是局部變數,@set定義的類似全局變數。
H. mysql 存儲過程中怎麼定義數組的格式
存儲過程里定義不了數組。如果是sqlserver,那麼你可以用表變數,游標來實現你的功能。 如果是sqlserver2005以上的版本,可以做clr存儲過程,那裡面是可以用數組的。
I. mysql存儲過程函數怎麼定義變數
以 DECLARE 關鍵字聲明的變數,只能在存儲過程中使用,稱為存儲過程變數,
例如:
DECLARE var1 INT DEFAULT 0;
主要用在存儲過程中,或者是給存儲傳參數中。