-- 每个参数都要指定类型 CREATEPROCEDURE productpricing( IN param1 VARCHAR(50), IN param2 Integer(11) )
出参(返回值)
1 2 3 4 5 6 7
-- 每个参数都要指定类型 DEFAULT用于指定默认值 CREATEPROCEDURE productpricing( IN param1 VARCHAR(50) DEFAULT "", IN param2 INT(11), OUT param3 DECIMAL(8,2) OUT param4 TIMESTAMP )
-- 定义局部变量,局部变量声明要放在存储过程开始的地方 DECLARE x VARCHAR(11);
查询赋值
1 2 3 4 5 6 7
DECLARE _roleId INT(11); DECLARE _roleName VARCHAR(20); -- 可以使用INTO将查询语句中的列结果赋值给变量 SELECT role_id,role_name INTO _roleId,_roleName FROM sys_role
设置变量的值
1
SET x =5;
流程控制语句
IF
1 2 3 4 5 6 7 8 9 10 11
-- IF IF x =5THEN SELECT*FROM sys_role; -- ELSEIF ELSEIF x =6THEN SELECT id FROM sys_role; -- ELSE 这里不用写THEN ELSE SELECT role_name FROM sys_role; -- IF执行之后一定要END IF,这里有; END IF;
Case语句
1 2 3 4 5
CASE [case值] WHEN [条件] THEN [执行的内容] WHEN [条件] THEN [执行的内容] ELSE [执行的内容] EndCASE
-- 如果存在就删除 DROPPROCEDURE IF EXISTS testPro; -- 定义分隔符 DELIMITER // -- 创建存储过程 CREATEPROCEDURE testPro( IN inParam Int(11), OUT outParam VARCHAR(20) ) BEGIN -- 定义局部变量 DECLARE _roleName VARCHAR(20); DECLARE done BIT DEFAULTFALSE; DECLARE roleName VARCHAR(50); DECLARE roleId INT(11); DECLARE userId INT(11); -- 定义一个游标 DECLARE cura CURSORFORSELECT id,role_id,role_name FROM sys_user; DECLARE CONTINUE HANDLER FORSQLSTATE'02000'SET done=TRUE; -- 也可以这样写DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 查询表 SELECT role_name -- 将查询的结果赋值给_roleName INTO _roleName FROM sys_role WHERE role_id = inParam; -- 设置outParam的值 IF _roleName = "ADMIN" THEN SET outParam = "管理员"; ELSEIF _roleName = "EMPLOYEE" THEN SET outParam = "员工"; ELSE SET outParam = "未知"; END IF; -- 打开游标 OPEN cura; -- 循环 REPEAT FETCH cura INTO userId,roleId,roleName; IF roleId ISNOTNULLTHEN UPDATE sys_user SET role_name = (SELECT role_name FROM sys_role WHERE role_id = roleId) WHERE id = userId; END IF; UNTIL done END REPEAT; CLOSE cura; END// DELIMITER ; -- 调用 CALL testPro(2,@testOut); SELECT@testOut;