存储过程学习笔记

函数

自己定义的

存储过程

相对于函数可以没有返回值,存储过程存储函数预先存储在mysql的服务器上边,而且预先编译好了
存储过程:
没有参数
只有in类型(有参数无返回)
只有out类型(无参数有返回)
有in和out类型的参数(有参数有返回)
如果自己创建的时候没有指明默认就是in类型

存储过程
characteristics:指明存储过程中带的约束
language sql:指明存储过程行为的结果是否确定
sql security:指明存储过程的权限

delimit $ 代替封号表示结束

存储过程的创建

delimiter //
CREATE PROCEDURE show_max_salary()
BEGIN
SELECT MAX(salary) FROM emp;
END //
delimiter ;

存储过程的调用

CALL show_max_salary

存储过程带参数的创建调用

elimiter //
CREATE PROCEDURE show_min_salary(OUT ms DOUBLE)
BEGIN
SELECT min(salary) INTO ms
FROM emp;
END //
delimit ;

call show_min_salary(@ms);
SELECT @ms

存储过程带参数的调用2

delimiter //
CREATE procedure show_some_one_salary (IN empname VARCHAR(20))
BEGIN
SELECT salary FROM emp WHERE last_name = empname;
END //
delimiter ;

调用方式1

call show_some_one_salary(“abel”)

调用方式2

set @empname = ‘Abel’;
call show_some_one_salary(@empname);

存储过程带参数的创建与调用3

delimiter //
CREATE PROCEDURE show_someone_salary(IN empname varchar(20),OUT empsalary DECIMAL(10,2))
BEGIN 
	SELECT salary INTO empsalary FROM emp WHERE last_name = empname;
END //
delimiter ;
SET @empname = "abel";
call show_someone_salary (@empname,@empsalary);
SELECT @empsalary

存储过程inout3

delimiter $ 
CREATE procedure show_mgr_name(inout empname VARCHAR(25)) 
BEGIN 
	SELECT last_name INTO empname FROM emp 
	WHERE employee_id =
	(SELECT manager_id FROM emp WHERE last_name = empname);
end $
delimiter ;
set @empname := "abel";
call show_mgr_name(@empname);
SELECT @empname

ps:在使用存储过程的时候由于不能调试因此错误难以排查

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值