mysql-存储过程

mysql-存储过程

测试表数据

CREATE TABLE `dept` (
  `code` varchar(255) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `parent_code` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105', '总公司', NULL);
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105001', '一分公司', 'C105');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105002', '二分公司', 'C105');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105003', '三分公司', 'C105');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105001001', '规划处', 'C105001');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105001002', '信息部', 'C105001');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105001002020', '技术中心', 'C105001002');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105002090', '塔里木', 'C105002');
INSERT INTO `wh_test`.`dept`(`code`, `name`, `parent_code`) VALUES ('C105003008', '长庆处', 'C105003');

1.创建存储过程


  • selectcompanyByNmae : 存储过程名字

  • ( IN cname VARCHAR ( 20 ) ): 括号内定义需要传的参数,创建形惨需要:——> in/out/inot-参数模式 ,形参名字,数据类型

  • 要执行的内容需要写在 BEGIN END字符之间,如果只有一句可以省略不写,可以看作是java方法那个大括号{ }

存储过程语法


CREATE PROCEDURE selectcompanyByNmae ( IN cname VARCHAR ( 20 ) ) BEGIN
	SELECT
		* 
	FROM
		dept 
	WHERE
		NAME = cname;
	END

参数模式:in,out,inout

  1. in 需要调用方输入的参数,例:call addStudentNo(‘123456’);创建存储过程时,模式要写成in,调用的时候就需要传入一个值
  2. out 返回是一个变量,需要用一个变量来接收,例:call selectStudentNo(@studentNo);函数不需要传入值,但是需要变量@studentNo接收
  3. 传入两个带有值的变量,经过存储过程操作后返回这两个变量

out参数模式

  1. 形参与字段名一样,通过表名区分 - dept.code 、dept.name
  2. 将查询结果赋值给变量 通过select xxxa,xxxb into xxxa变量,xxxb变量
CREATE PROCEDURE selectcompanyByNmae1 (
    IN cname VARCHAR ( 20 ),
    out `code` varchar(20)
 ) BEGIN
	SELECT
		dept.CODE into `code`
	FROM
		dept 
	WHERE
		NAME = cname;
	END

inout模式

创建

CREATE PROCEDURE computedResult(
inout a int,
inout b int 
)
BEGIN
set a= a*10;
set b= b*10;
END

调用

set @aa:=1;
set @bb:=3;

call computedResult(@aa,@bb);
 
SELECT @aa,@bb

返回结果

image-20220803143709937

2.调用存储过程


call 存储过程的名字()
  1. 存储过程的本质就是一段sql代码,本质内容是看你begin 和 end的之前的代码段是做什么的。
  2. 以前不了解的时候,总以为使用存储过程会返回一段处理结果,就和使用select一样,然而这个返回没有关系,主要看代码段内容
  3. 代码里写的是select查询字段(不是 select xxx into xxx),才会有结果查看
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值