MySQL存儲過程

MySQL存儲過程

存儲過程

定義存儲過程

delimiter ;;create procedure get_user_count()begin
	select count(*) as user_count from sys_user;end;;
delimiter;

關於分隔符

MySQL語句分隔符爲;,MySQL命令行程序也使用;作爲語句分隔符。如果通過命令行執行存儲過程會解釋存儲過程自身內的;字符,會使存儲過程中的SQL出現語法錯誤。

調用存儲過程

call get_user_count();

刪除存儲過程

drop procedure get_user_count;

使用參數

參數中有out

-- 使用參數-- in 傳遞到存儲過程-- out 從存儲過程傳出-- inout 對存儲過程傳入和傳出delimiter ;;create procedure get_count(	out user_count int(10),	out role_count int(10),	out dict_count int(10))begin
	select count(*) into user_count from sys_user;	select count(*) into role_count from sys_role;	select count(*) into dict_count from sys_dict;end;;
delimiter ;-- 調用-- 所有MySQL變量都必須以@開始-- 不能通過一個參數返回多個行和列call get_count(@user_count, @role_count, @dict_count);select @user_count, @role_count, @dict_count;

參數中有in有out

drop procedure if exists get_user_by_name;
delimiter ;;create procedure get_user_by_name(	in user_name varchar(45),	out user_id int(10))begin
	select id from sys_user where user_name = user_name limit 1 into user_id;end;;
delimiter ;-- 調用call get_user_by_name('admin', @admin_id);select @admin_id;

複雜一點的

-- comment 給存儲過程加註釋-- 定義delimiter ;;create procedure insert_user(	in userName varchar(50),	in defaultPass boolean,	out userId int) comment 'create user'begin
	declare pass varchar(50) default null;
	
	if defaultPass then		set pass = '123456';	end if;	
	insert into sys_user(user_name, user_password, create_time) 
	values (userName, pass, now());	select LAST_INSERT_ID() into userId;end;;
delimiter ;-- 調用call insert_user('張三', false, @userId1);call insert_user('李四', true, @userId2);select @userId1, @userId2;select id, user_name, user_password, create_time from sys_user;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章