MySQL存储过程和存储函数
一:创建存储过程:
demo1:判断输入参数;创建表。
delimiter //
create procedure proce_t1(in param int)
begin
declare fft varchar(20);
if param = 1 then
set fft = 'Mysql1';
else
set fft = 'Mysql2';
end if;
create table proce_test1(
id int(11) not null primary key auto_increment,
name varchar(20) not null
);
select fft;
end
//
执行完成后,替换回来:
delimiter;
调用:
call proce_t1(1);
删除:
drop procedure proce_t1;
demo2:查询proce_test1记录数。reads sql data没有这句会报错
delimiter //
create procedure proce_t2(out count_num int)
reads sql data
begin
select count(id) into count_num from proce_test1;
end
//
替换回来
delimiter;
调用:@abc声明全局变量abc 作为输出参数。
call proce_t2(@abc);
select @abc;
删除:
drop procedure proce_t2;
二:创建存储函数
demo1:查询输入name参数查询id数据
delimiter //
create function fun_t1(ne varchar(20))
returns int(11)
reads sql data
begin
return(select id from proce_test1 where name=ne);
end
//
替换回来:
delimiter;
调用:
select fun_t1('2');
删除:
drop function fun_t1;
三:变量的应用
局部参数-局部变量:只在定义该局部变量的begin end范围内有效;
会话参数-会话变量:在整个存储过程范围内都有效;
1、声明局部变量
declare a int; // 定义变量,默认值为null
declare aa char(10) default 'innertext'; // 定义变量,设置默认值
demo1:
delimiter //
create procedure p1()
begin
declare x char(10) default '123';
begin
declare x char(10) default '456';
select x;
end
select x;
end
//
2、声明全局变量
不必声明即可使用,在整个过程中有效,以字符@作为起始字符。
demo1:
delimiter //
create procedure p2()
begin
set @t=1;
begin
set @t=2;
select @t;
end
select @t;
end
//
3、为变量赋值
(1)declare aa varchar(10) default '456';
(2)set aa = ‘1234’
set @aaa = 3;
(3)select tel into aa from table_name where id = 1;
4、查看存储过程/函数
(1)查看存储过程/函数状态
show procedure | function status like 'pattern';
(2)查看存储过程/函数语句
show create procedure | function proce_fun_name;
四:光标和修改已有的存储过程函数
修改(没梳理完整,后面补)
demo1:
alter procedure proce_name
modifies sql data
sql security invoker;
光标(没梳理完整,后面补)