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。
Mysql存储过程查询结果赋值到变量的方法
把查询结果赋值到变量,大部分情况下使用游标来完成,但是如果明确知道查询结果只有一行(例如统计记录的数量,某个字段求和等),其实可以使用set或into的方式来实现赋值。示例代码:
drop table if exists test_tbl
create table test_tbl (name varchar(20), status int(2))
insert into test_tbl values('abc', 1),('edf', 2),('xyz', 3)
drop procedure IF EXISTS pro_test_3
delimiter //
create procedure pro_test_3()
begin
DECLARE cnt INT DEFAULT 0
select count(*) into cnt from test_tbl
select cnt
-- 多个列的情况下似乎只能用 into 方式
select max(status), avg(status) into @max, @avg from test_tbl
select @max, @avg
end
delimiter
call pro_test_3()
在对table1进行插入之后,加上下面一行语句:
$lastId = mysql_insert_id()
这样就能够获取多在table1中插入的最后一条id,也就是本次插入的那条,然后再使用$lastId来对table2进行 *** 作
这里再补充一下吧:
//显示对table1进行 *** 作$tb1sql = "insert into `table1` values(null,(..其他字段的值..))"
if(mysql_query($tb1sql)){
$lastId = mysql_insert_id()
}
//再对table2 *** 作
$tb2sql = "insert into `table2` values({$lastId},(..其他字段值..))"
if(mysql_query($tb2sql)){
echo "success"
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)