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;

光标(没梳理完整,后面补)

你可能感兴趣的:(MySQL存储过程和存储函数)