一:創建存儲過程:
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;
光標(沒梳理完整,后面補)