标签:
基本语法就自己百度吧,虽然我百度了,但是我基本没看明白,还是多敲代码的好啊
1、delimiter
更改命令结束符(因为在procedure中经常要用到默认的命令结束符--分号(;)
所以在创建procedure的时候需要定义新的结束符以说明创建procedure的命令结束)这里将结束符号改成美元符号($)
变量:
变量的作用范围同编程里面类似,在这里一般是在对应的begin和end之间。在end之后这个变量就没有作用了,不能使用了。这个同编程一样。
另外有种变量叫做会话变量(session variable),也叫做用户定义的变量(user defined variable)。这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。这种变量用 途比较广,因为只要在一 个会话内(就是某个应用的一个连接过程中),这个变量可以在被调用的存储过程或者代码之间共享数据。
局部变量
DECLARE var_name[,...] type [DEFAULT value]
如 declear a int(2) default 2;
注意该语句使用的地方(不能在外部程序中使用)
赋值语句set
SET var_name = expr [, var_name = expr] ...
如set a=5;set a=a+4;
赋值的所有操作都要使用set语句,直接使用a=5的操作是非法的
注意该语句使用的地方(不能在外部程序中使用)
@操作符
@a用于定义一个全局变量,该变量的生命周期只在本次连接。
set @a=3;赋值语句
set @a=b语句可存在于任何语句块中
2、MySQL中,创建存储过程的基本形式如下:
其中,sp_name参数是存储过程的名称;proc_parameter表示存储过程的参数列表; characteristic参数指定存储过程的特性;routine_body参数是SQL代码的内容,可以用BEGIN…END来标志SQL代码的开始和结束。
proc_parameter中的每个参数由3部分组成。这3部分分别是输入输出类型、参数名称和参数类型。其形式如下:
其中,IN表示输入参数;OUT表示输出参数; INOUT表示既可以是输入,也可以是输出; param_name参数是存储过程的参数名称;type参数指定存储过程的参数类型,该类型可以是MySQL数据库的任意数据类型。
列:
delimiter $
create procedure mytest(out pamar int)
begin
select count(*) into param from user;
end$
调用:
demiliter ; (命令结束符更改回来)
call mytest(@num); (会话变量,参考前面)
select @num (读取变量值)
drop procedure mytest; //删除存储过程
/************************************/
create procedure mytest(inout sexflag int)
begin
select * from user where sex=sexflag
end$
set @sexflag=xx
call mytest(@sexflag);
/****************************************/
create procedure test()
begin
declare i int //定义变量
set i=0; //设置变量值
while i<10 do
insert into user(username,password) values(i,‘pwd‘);
或者
insert into user(username,password) values(concat(‘user‘,i),"pwd");
set i=i+1;
end while;
end$
delimiter ;
call test();
/****************/
delimiter $
create procedure test1(in param int)
begin
(也可以定义变量
declare i int;
set i=param+1;
)
if param=1 then
insert into user(username,password) values(‘eeee‘,‘11111‘);
else
insert into user2(usename,password) values(‘ttt‘,‘222222222222‘);
enf if;
end$
delimiter ;
call test1(1); 或者 call test1(2);
/********************************/
delimiter $
create procedure mytest(in param int)
begin
set @num=1;
while @num<20 do
if param=1 then
insert into user(username,password) values(concat(‘user‘,@num),‘pwd‘);
else
insert into user2(username,password) values(concat(‘user‘,@num),‘pwd‘);
end if;
set @num=@num+1;
end while;
end$
delimiter ;
call mytest(1) 或者 call mytest(2)
标签:
原文地址:http://www.cnblogs.com/ysp123/p/5762006.html